回文的一个问题
今天在看飞燕之家的一个问题,原帖在这http://问题描述:
所谓回文,就是像"acbca"或者"12966921"这样的字符串,左右对称。
现在的问题是,假如给你"abaqbaa"这样的字符串,你可以对它添加一
些字符,得到"aabaqqabaa"变成回文,一共加了3个字符。
问对于随意给的一字字符串,你最少要加多少个字符才能使它变成回文?
对于刚刚的"abaqbaa",其实可以只加2个字符变成"aabaqabaa"就成为回
文了,2就是这个字符串的最少添加字符数目。
输入
多组测试数据,每组只有一行,就是一个字符串,串长小于1000
输出
输出最少要加的字符个数
样例输入
abaqbaab
abccba
1357351
样例输出
3
0
2
想了很久没做出来,看看答案还没看懂,
下面贴着的是 ttuurr的答案谁大概能解释一下,给点思路就好,谢谢了
程序代码:#include <cstdio>
#include <cstring>
const int MAX=1000;
char s[MAX+1];
int c[2][MAX+1];
int main() {
int i, j, len;
while(scanf("%s", s) != EOF) {
len=strlen(s);
for(i=1; i<=len; i++)
{
for(j=0; j<=len; j++)
c[0][j]=c[1][j];
for(j=1; j<=len; j++)
{
c[1][j]=c[1][j-1];
if(c[0][j] > c[1][j])
c[1][j]=c[0][j];
if(s[i-1]==s[len-j] && c[1][j]<c[0][j-1]+1)
c[1][j]=c[0][j-1]+1;
}
}
printf("%d\n",len-c[1][len]);
for(i=0; i<=len; i++)
c[1][i]=0;
}
return 0;
}
[[it] 本帖最后由 xuanzilie 于 2008-7-22 22:41 编辑 [/it]]








