写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步!
回文串
【问题描述】
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。给你一个字符串,问最少在字符串尾添加多少字符,可以使得字符串变为回文串。
【输入格式】
有多组测试数据。
每组测试数据第一行是一个正整数N,表示字符串长度,接下来一行是长度为N的字符串,字符串中只有小写字母。
N=0表示输入结束,并且不需要处理。
40%的数列元素个数N 1 ≤ N≤ 100;
30%的数列元素个数N 1 ≤ N≤ 1000;
20%的数列元素个数N 1 ≤ N≤ 10000;
10%的数列元素个数N 1 ≤ N≤ 100000;
【输出格式】
对于每组测试数据,输出一个非负整数:添加最少的字符数,可以使得字符串变为回文串。
【样例输入】
3
aba
4
aaac
0
【样例输出】
0
3
【示例代码】
#include <bits/stdc++.h>
using namespace std;
bool judge(char ch[],int n)
{
bool b=true;
char ch1[n];
for(int i=0;i<n;i++)
{
ch1[n-i-1]=ch[i];
}
for(int i=0;i<n;i++)
{
if(ch[i]!=ch1[i])
{
b=false;break;
}
}
return b;
}
int main()
{
while(1)
{
int n;
cin>>n;
if(n==0) {
break;}
char ch[n];
cin>>ch;
bool b=judge(ch,n);
if(b==true)
{
cout<<'0'<<endl;
continue;
}
else
{
int res=n-1;
int num=n;
for(int i=0;i<n;i++)
{
char ch1[num];
strncpy(ch1,ch+i,num);
ch1[num]='\0';
bool b=judge(ch1,num);
if(b==true) {
res=i;break;}
num--;
}
cout<<res<<endl;
}
}
return 0;
}