Longest Common Subsequence
Longest Common Subsequence
Example For "ABCD" and "EDCA", the LCS is "A" (or "D", "C"), return 1.
For "ABCD" and "EACB", the LCS is "AC", return 2.
State: f[i][j]表示在前i個跟前j個最大的LCS長度
Func: f[i][j] = if A[i-1]==B[j-1] (f[i-1][j-1]+1) else max{f[i-1][j], f[i][j-1]}
Init: f[i][0]=f[0][j]=0
Ans: f[n+1][m+1]
public int longestCommonSubsequence(String A, String B) {
int lenA = A.length()+1;
int lenB = B.length()+1;
int[][] f = new int[lenA][lenB];
for(int i=1; i<lenA; i++){
for(int j=1; j<lenB; j++){
if(A.charAt(i-1) == B.charAt(j-1)){
f[i][j] = f[i-1][j-1]+1;
}else{
f[i][j] = Math.max(f[i-1][j], f[i][j-1]);
}
}
}
return f[A.length()][B.length()];
}Longest Common Substring
State: f[i][j]表示在i個跟前j個包含i,j最大的LCSubString長度
Func: f[i][j] = if A[i-1]==B[j-1] (f[i-1][j-1]+1) else 0
Init: f[i][0]=f[0][j]=0
Ans: loop to find max
Last updated
Was this helpful?