您的位置:首页 > 产品设计 > UI/UE

Uva - 10405 - Longest Common Subsequence

2013-03-16 09:30 357 查看
题意:求最长公共子串的长度。

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=114&problem=1346

——>>题意简单,设d[i][j]表示前i个a和前j个b的最长公共子串的长度,

当a[i] == b[j]时,d[i][j] = d[i-1][j-1];

否则d[i][j] = max(d[i-1][j], d[i][j-1]);

不过有小陷阱:测试数据中有空格字符存在,用scanf("%s", &)就WA!!!

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 1000 + 10;
int d[maxn][maxn];

int main()
{
char a[maxn], b[maxn];
while(gets(a+1) && gets(b+1))   //测试数据中有空格字符,用scanf("%s", &)WA!!!
{
int len_a = strlen(a+1), len_b = strlen(b+1), i, j;
memset(d, 0, sizeof(d));
for(i = 1; i <= len_a; i++)
for(j = 1; j <= len_b; j++)
if(a[i] == b[j]) 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_a][len_b]);

}
return 0;
}
另外发现,若令len_a = strlen(a), len_b = strlen(b);下面的跳出条件为<len_a,<len_b,最后输出d[len_a-1][len_b-1]时,会WA!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: