class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
vector<vector<int>> dp(text2.size() + 1, vector<int>(text1.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]){
dp[j][i] = dp[j - 1][i - 1] + 1;
}else{
dp[j][i] = max(dp[j - 1][i], dp[j][i - 1]);
}
}
}
return dp[text2.size()][text1.size()];
}
};
这题的思路在于dp[j][i]中所存的是text1前i个字符与text2前j个字符的最长子字符串,在不断遍历中如果碰到了相同的字符,那么就取dp[j-1][i-1]+1,也就是两字符串各减一位时的最长子字符串长度+1,如果不同,就取dp[j-1][i]与dp[j][i-1]中的最大值,因为当前两个字符不同,所以两者的最大值也就是当前位置的最长子字符串长度。