
还算是挺简单的一题。
维护二维数组代表截至至两个字符串的某个位置,前面的最长公共子序列长度。
状态转移方程就是当两字符相等是,取俩位置前一个的值加一,否则就直接等于俩位置前一个值。
cpp
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
vector<vector<int>> common(text1.size()+1,vector<int> (text2.size()+1,0));
for(int i=1;i<=text1.size();i++){
for(int j=1;j<=text2.size();j++){
if(text1[i-1]==text2[j-1]) common[i][j]=max(common[i][j],common[i-1][j-1]+1);
else common[i][j]=max(common[i-1][j],common[i][j-1]);
}
}
return common[text1.size()][text2.size()];
}
};