AC截图
题目
思路
使用二维数组dp[i][j]记录目前最大公共子串长度,i代表text1的下标,j代表text2的下标
以text1="abcde",text2="ace"为例
①如果text[i] == text[j] ,dp[i][j] = dp[i-1][j-1]+1
②如果text[i] != text[j],dp[i][j] = max(dp[i-1][j],dp[i][j-1])
j\i | a | b | c | d | e | |
0 | 0 | 0 | 0 | 0 | 0 | |
a | 0 | 1 | 1 | 1 | 1 | 1 |
c | 0 | 1 | 1 | 2 | 2 | 2 |
e | 0 | 1 | 1 | 2 | 2 | 3 |
代码
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int m = text1.size();
int n = text2.size();
vector<vector<int>> dp(m+1,vector(n+1,0));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(text1[i-1] == text2[j-1]){
dp[i][j] = dp[i-1][j-1]+1;
}else{
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[m][n];
}
};