题解 | #最长公共子串#
最长公共子串
http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac
动态规划,dp[i+1][j+1] = dp[i][j] + 1; dp[i][j]之前的公共子串长度
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
int maxLength = 0;
int lastIndex = 0;
int[][] dp = new int[str1.length()+1][str2.length()+1];
for(int i = 0;i<str1.length();i++){
for(int j = 0;j<str2.length();j++){
if(str1.charAt(i) == str2.charAt(j)){
dp[i+1][j+1] = dp[i][j] + 1;
if(dp[i+1][j+1] > maxLength){
maxLength = dp[i+1][j+1];
lastIndex = i;
}
}
else{
dp[i][j] = 0;
}
}
}
return str1.substring(lastIndex - maxLength + 1,lastIndex + 1);
}
}