用动态规划法解题。
import java.util.*;
public class Solution {
/**
* longest common substring
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @return string字符串
*/
public String LCS (String str1, String str2) {
// write code here
if (str1 == null || str2 == null || str1.equals(" ") || str2.equals(" ")) {
return "-1";
}
//动态规划 二维数组,斜下来就是最长字串
int str1len = str1.length();
int str2len = str2.length();
int maxLen = 0;
int index = 0;
// 定义一个二维数组
int[][] dp = new int[str1len][str2len];
//第一步:划分
for (int i = 0; i < str1len; i++) {
for (int j = 0; j < str2len; j++) {
if (str1.charAt(i) == str2.charAt(j)) {
//防止数组越界
if (j * i ==0){
dp[i][j]=1;
//if条件语句保证maxLen不被破坏
if(maxLen < dp[i][j]){
maxLen = dp[i][j];
index = i;
}
} else{
dp[i][j] = dp[i - 1][j - 1] + 1;
//if条件语句用来更新maxLen
if(maxLen < dp[i][j]){
maxLen = dp[i][j];
index = i;
}
}
}
}
}
if( maxLen==0 ){
return "-1";
}
return str1.substring(index-maxLen+1,index+1);
}
}


京公网安备 11010502036488号