最长公共子串问题的基本表述为:
给定两个字符串,求出它们之间最长的相同子字符串的长度。
/**
* 最长公共子串(连续)
* @author 过路的守望
*
*/
public class LongIncrementSub {
public static void main(String[] args) {
System.out.println(getLongestCommonSub("advdfdfdf", "dvdfd"));
}
public static String getLongestCommonSub(String A,String B){
int a_len = A.length();
int b_len = B.length();
int[][] dp = new int[a_len][b_len];
/*
* 记录长度
*/
int size = 0;
/*
* 记录结束索引
*/
int endindex = 0;
for(int i = 0;i<a_len;i++){
char a = A.charAt(i);
for(int j =0;j<b_len;j++){
char b =B.charAt(j);
if(a == b){
/**
* 若有一方起点为0,则公共长度为1。
*/
if(i==0||j==0){
dp[i][j] = 1;
}
else {
dp[i][j] = dp[i-1][j-1]+1;
}
if(dp[i][j]>size){
size = dp[i][j];
endindex = i;
}
}
}
}
return A.substring(endindex-size+1,endindex+1);
}
}