UVA10405 LCS不同长度

来源:互联网 发布:高仿运动服 淘宝 编辑:程序博客网 时间:2024/05/20 18:19

只不过是两个不同长度的LCS而已

相对比较恶心的地方是题目的输入,读入的字符串可能含有空格,所以只能用gets函数

另外,一个字符数组,读入一次,再读一次,会先把前面的抹掉

对于LCS如果采取的状态d[i][j]代表的是每个字符串i到j的公共子序列的话else那里的状态转移不对?

#include <iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int d[1002][1002];int main(){   // freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    char str1[2000];    char str2[2000];    while(gets(str1)&&gets(str2))    {        int len1=strlen(str1);        int len2=strlen(str2);        if(len1<len2)        {            for(int i=len1;i<len2;i++)            {                str1[i]=-1;            }        }        else if(len1>len2)        {            for(int i=len2;i<len1;i++)            {                str2[i]=-1;            }        }        int len=len1>len2?len1:len2;        for(int i=0;i<=len;i++)        {            d[i][0]=d[0][i]=0;        }        for(int i=1;i<=len;i++)        {            for(int j=1;j<=len;j++)            {                if(str1[i-1]==str2[j-1])                    d[i][j]=d[i-1][j-1]+1;                else                {                    d[i][j]=max(d[i-1][j],d[i][j-1]);                }            }        }        printf("%d\n",d[len][len]);    }    return 0;}


0 0
原创粉丝点击