最长公共子串
思路参考这篇博客:https://www.cnblogs.com/fanguangdexiaoyuer/p/11281179.html
代码:
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) {
if (str1.length() == 0|| str2.length() == 0 || str1 == null || str2 == null) {
return "";
}
int str1len = str1.length();
int str2len = str2.length();
int[][] dp = new int[str1len + 1][str2len + 1];
//定位最长连续子串最后一个字符对应的索引
int end = 0;
int sum = 0;
for (int i = 1; i <= str1len; i++) {
for (int j = 1; j <= str2len; j++) {
if(str1.charAt(i-1) == str2.charAt(j-1)){
dp[i][j] = dp[i-1][j-1] + 1;
if (sum < dp[i][j]){
sum = dp[i][j];
end = i - 1;
}
}
}
}
String res = str1.substring(end + 1 - sum,end + 1);
return res;
}
}