1 Ab3bd
2
思路分析:
其实就是最长公共子序列的变种,将原序列str倒置后得到tmp。求出最长公共子序列的长度,则这些就是回文字串,剩下的就是没有匹配的字符的个数。用总长度减去最长公共子序列的长度,就得到需要添加的字符数量。
# include <stdio.h>
# include <string.h>
# define max(a,b)a>b?a:b
int main(void)
{
int i,j,a,n,p[1001][1001];
char c[1001],s[1001];
scanf("%d", &a);
while (a--)
{
memset(p,0,sizeof(p));
scanf("%s", &s);
n = strlen(s);
i = 0;j = n-1;
while (i < n)
c[i++] = s[j--]; //倒置
for (i = 1;i <= n; i++)
for (j = 1; j <= n; j++)
{
if (s[i-1] == c[j-1])
p[i][j] = p[i-1][j-1] + 1;
else
p[i][j] = max (p[i-1][j],p[i][j-1]);
}
printf("%d\n", n-p[n][n]);
}
return 0;
}
原文地址:http://blog.csdn.net/java_oracle_c/article/details/40790215