https://leetcode.com/problems/longest-common-subsequence/
解题思路:
动态规划,二维数组,记录最长公共子序列的值。
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int l1 = text1.length();
int l2 = text2.length();
if(l1==0 || l2==0)
return 0;
if(l1<l2)//确保text1 的长度 大于text2
return longestCommonSubsequence(text2, text1);
int result [l1][l2];
int i=0, j=0;
if(text1[0]==text2[0])//对矩阵的左上角进行赋值
result[0][0]=1;
else
result[0][0]=0;
for(j=1;j<l2;j++)//对第一行进行赋值
if(text1[0]==text2[j])
result[0][j]=1;
else
result[0][j]=result[0][j-1];
for(i=1;i<l1;i++)//对第一列进行赋值
if(text2[0]==text1[i])
result[i][0]=1;
else
result[i][0]=result[i-1][0];
for(i=1;i<l1;i++){//对矩阵中其他行和列进行赋值
for(j=1;j<l2;j++){
if(text1[i]==text2[j])
result[i][j]=result[i-1][j-1] + 1;
else
result[i][j]=max(result[i][j-1], result[i-1][j]);
}
}
return result[l1-1][l2-1];
}
};
欢迎关注公众号: