回文串(C++实训题)

写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步!

回文串

【问题描述】
“回文串”是一个正读和反读都一样的字符串,比如“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;
}

猜你喜欢

转载自blog.csdn.net/qq_45909595/article/details/108023314
今日推荐