所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
using namespace std;
int str[1000][1000];
void num()
{
int i, j;
memset(str, 0 ,sizeof(str));
string a, b;
cin>>a;
b=a;
reverse(b.begin(),b.end()); //字符串反转函数
for(i=0; i<a.length(); i++)
for(j=0; j<b.length(); j++) //记录当前最多相同的字符数
{
if(a[i]!=b[j])
{
if(str[i][j+1]>str[i+1][j])
str[i+1][j+1] = str[i][j+1];
else
str[i+1][j+1] = str[i+1][j];
}
else
str[i+1][j+1] = str[i][j]+1;
}
printf("%d\n",a.length()-str[a.length()][a.length()]); // 字符串长度—最大的想拼配的字符
}
int main()
{
int N;
scanf("%d",&N);
getchar();
while(N--)
{
num();
}
system("pause");
return 0;
}