1143. 最长公共子序列
解题思路
- 定义一个二维的dp数组
- 每次取出一个字符 那么公共子序列可能就发生变化 那么状态就是公共子序列长度
- base case: 将第一行和第一列所有元素全部初始化为0
- 如果当前的字符相等 那么直接计算 两个字符串的子序列长度
- 如果两个字符不相等 那么计算dp[i][j - 1],dp[i - 1][j]的最大值
class Solution {
public int longestCommonSubsequence(String text1, String text2) {
int m = text1.length();
int n = text2.length();
int[][] dp = new int[m + 1][n + 1];
for(int i = 0; i <= m;i++){
dp[i][0] = 0;
}
for(int j = 0; j <= n; j++){
dp[0][j] = 0;
}
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
if(text1.charAt(i - 1) == text2.charAt(j - 1)){
dp[i][j] = dp[i - 1][j - 1] + 1;
}else{
dp[i][j] = Math.max(dp[i][j - 1],dp[i - 1][j]);
}
}
}
return dp[m][n];
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39