第11天--算法(最长公共子序列)
最长公共子序列
class Solution {
public int longestCommonSubsequence(String text1, String text2) {
char s1[] = text1.toCharArray();
char s2[] = text2.toCharArray();
int M = s1.length;
int N = s2.length;
int dp[][] = new int[M][N];
dp[0][0] = s1[0] == s2[0] ? 1 : 0;
for(int j = 1;j < N;j ++) {
dp[0][j] = s1[0] == s2[j] ? 1 : dp[0][j - 1];
}
for(int i = 1;i < M;i ++) {
dp[i][0] = s2[0] == s1[i] ? 1 : dp[i - 1][0];
}
for(int i = 1;i < M;i ++) {
for(int j = 1;j < N;j ++) {
int p1 = dp[i - 1][j];
int p2 = dp[i][j - 1];
int p3 = s1[i] == s2[j] ? dp[i - 1][j - 1] + 1 : 0;
dp[i][j] = Math.max(p1,Math.max(p2,p3));
}
}
return dp[M - 1][N - 1];
}
}

浙公网安备 33010602011771号