您的位置:首页 > 其它

UVA10405 LCS不同长度

2015-06-06 23:10 225 查看
只不过是两个不同长度的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: