码迷,mamicode.com
首页 > 其他好文 > 详细

最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

时间:2015-04-26 09:15:27      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

http://www.cnblogs.com/zhangchaoyang/articles/2012070.html


把一个问题转换为若干个规模更小的子问题,并且都借助于一个二维矩阵来实现计算。

约定:字符串S去掉最后一个字符T后为S‘,T1和T2分别是S1和S2的最后一个字符。

则dist(S1,S2)是下列4个值的最小者:

1.dist(S1‘,S2‘)--当T1==T2

2.1+dist(S1‘,S2)--当T1!=T2,并且删除S1的最后一个字符T1

3.1+dist(S1,S2‘)--当T1!=T2,并且在S1后面增加一个字符T2

4.1+dist(S1‘,S2‘)--当T1!=T2,并且把S1的最的一个字符T1改成T2

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<queue>

using namespace std;
const int maxn=500;
const int inf=0x3f3f3f3f;
const int chart=26;
typedef unsigned long long ll;

int dp[maxn][maxn];
char s1[500],s2[500];
int main(){
    int m,n;
    while(scanf("%s%s",s1,s2)!=EOF){
        n=strlen(s1);m=strlen(s2);
        memset(dp,0x3f,sizeof(dp));
        for(int i = 0;i<=max(m,n);i++) dp[0][i]=dp[i][0]=i;
        for(int i = 1;i<=n;i++)
            for(int j = 1;j<=m;j++){
                if(s1[i-1]==s2[j-1]) dp[i][j]=dp[i-1][j-1];
                dp[i][j]=min(dp[i][j],min(dp[i-1][j]+1,dp[i][j-1]+1));
                dp[i][j]=min(dp[i][j],dp[i-1][j-1]+1);
            }
        printf("%d\n",dp[n][m]);

    }
    return 0;
}

最长公共子串

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<queue>

using namespace std;
const int maxn=500;
const int inf=0x3f3f3f3f;
const int chart=26;
typedef unsigned long long ll;

int dp[maxn];
char s1[500],s2[500];
int main(){
    int m,n;
    while(scanf("%s%s",s1,s2)!=EOF){
        int ans=0;
        n=strlen(s1);m=strlen(s2);
        memset(dp,0,sizeof(dp));
        for(int i = 1;i<=n;i++)
            for(int j = m;j;j--){
                if(s1[i-1]==s2[j-1]) dp[j]=dp[j-1]+1;
                else dp[j]=0;
                ans=max(ans,dp[j]);
            }
        printf("%d\n",ans);

    }
    return 0;
}


最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

标签:

原文地址:http://blog.csdn.net/gg_gogoing/article/details/45285747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!