Common Subsequence

L - Common Subsequence

参考:ACM POJ 1458 Common Subsequence (最长公共子序列,动态规划)

思路:二维动态规划。

dp[i][j]:在截止至s1i-1s2j-1位置,两个串的最长公共子序列长度。

动态规划方程:

if(s1[i]==s2[j])  dp[i+1][j+1]=dp[i][j]+1;
else  dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);

即如果s1[i]==s2[j],则表示当前最长公子序列可加1,若不相等,则为前面的状态的dp最大值。

代码:

// Created by CAD on 2019/11/5.
#include <iostream>
#include <string>
using namespace std;

int dp[1005][1005];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s1,s2;
    while(cin>>s1>>s2)
    {
        int len1=s1.length(),len2=s2.length();
        for(int i=0;i<=len1;++i) dp[i][0]=0;
        for(int i=0;i<=len2;++i) dp[0][i]=0;
        for(int i=0;i<len1;++i)
            for(int j=0;j<len2;++j)
                if(s1[i]==s2[j]) dp[i+1][j+1]=dp[i][j]+1;
                else dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
        cout<<dp[len1][len2]<<endl;
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务