题解 | #最长公共子串#
最长公共子串
http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac
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){
return null;
}
int m = str1.length();
int n = str2.length();
//dp[i][j] 代表 0...i-1 到 0....j-1的公共子串长度
int[][] dp = new int[m+1][n+1];
//max 最长公共子串长度
int max = 0,end = 0;
for(int i = 0 ;i< m;i++){
for(int j = 0;j< n;j++){
if(str1.charAt(i) == str2.charAt(j)){
dp[i+1][j+1] = dp[i][j]+1;
if(max < dp[i+1][j+1]){
max = dp[i+1][j+1];
end = i+1;
}
}
}
}
return max ==0 ? "-1":str1.substring(end - max ,end);
}
}