状态转移方程
1.if i=0 || j=0 arr[i][j]=0
2.if str1[i]==str2[j] arr[i][j]=arr[i-1][j-1]+1 (左上角+1)
3.if str1[i]!=str2[j] arr[i][j]=max(arr[i][j-1],arr[i-1][j]) (左边或上边)
下边程序偏移1位
int arr[1001][1001]={0};
int maxStrLen(string s,string t)
{
int maxv=-1;
for(int i=0;i<s.size();i++)
{
for(int j=0;j<t.size();j++)
{
if(s[i]==t[j])
{
arr[i+1][j+1]=arr[i][j]+1;
}
else
{
arr[i+1][j+1]=arr[i][j+1]>arr[i+1][j]?arr[i][j+1]:arr[i+1][j];
}
if(maxv<arr[i+1][j+1])maxv=arr[i+1][j+1];
}
}
return maxv;
}
最长公共子序列算法
本文介绍了一种寻找两个字符串中最长公共子序列的算法实现。通过状态转移方程定义了不同情况下的状态更新规则,并给出了具体的C++实现代码示例。
29万+

被折叠的 条评论
为什么被折叠?



