Applese 的回文串(牛客寒假算法基础集训营4 :I 题)

版权声明:转载于[email protected]的博客 https://blog.csdn.net/nuoyanli/article/details/88873520

链接:https://ac.nowcoder.com/acm/contest/330/I
来源:牛客网
 

自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。


这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。

如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?

输入描述:

仅一行,为一个由字母和数字组成的字符串 s。

输出描述:

如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。

示例1

输入

复制

applese

输出

复制

No

示例2

输入

java

输出

Yes

备注:

|s|≤10^5

思路:枚举最外层找到不符合回文串的位置,分别判断:1.从当前开始到最后一个不符合条件的位置是否是回文串(就是删除当前字符)2.从当前的下一个到倒数第二个不符合条件的位置是否是回文串(就是删除与当前字符对应位置但是不符合回文串的字符)

参考代码:

#include<iostream>
#include<string>
using namespace std;
bool judge(string str)
{
    for(int i = 0; i<(int)str.size()/2;i++){
        if(str[i] != str[str.size()-1-i])
            return 0;
    }
    return 1;
}
int main()
{
    string str;
    while(cin>>str)
    {
        bool flag = 0;
        int i;
        for(i = 0; i<(int)str.size()/2;i++)
            if(str[i] != str[str.size()-1-i])
                break;
        if(i == (int)str.size()/2)
            flag = 1;
        else
            flag = (judge(str.substr(i+1,str.size()-2*i-1)) || judge(str.substr(i,str.size()-2*i-1)));
        cout<< ((flag==1) ? "Yes" : "No")<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/nuoyanli/article/details/88873520