此题,两个字符串比较,一般记得先定义二维数组,各维代表一个字符串。
matrix[i][j]代表:字符串a的从0到第i个字符和字符串b的从0到第j个字符的最长相同子序列长度。
那么对于这个长度:
如果i和j相等,那即为matrix[i-1][j-1](各自前一个字符串的最长相同子序列长度)加上 1(又一个相等的)
如果不等,那即为,matrix[i-1][j-1],matrix[i][j-1],matrix[i-1][j]三者的最大值。而事实上matrix[i-1][j-1]又分别被matrix[i][j-1]和matrix[i-1][j]代表,所以求最大值时,可以将matrix[i-1][j-1]忽略。
public class Solution {
/*** @param A, B: Two strings.
* @return: The length of longest common subsequence of A and B.
*/
public int longestCommonSubsequence(String A, String B) {
// write your code here
int al = A.length();
int bl = B.length();
int[][] lcs = new int[al+1][bl+1];
for (int i = 1; i <= al; i++) {
for (int j = 1; j <= bl; j++) {
lcs[i][j] = Math.max(lcs[i-1][j], lcs[i][j-1]);
if (A.charAt(i-1) == B.charAt(j-1)) {
lcs[i][j] = lcs[i-1][j-1] + 1;
}
}
}
return lcs[al][bl];
}
}