一道字符串水题。

输入s后从两侧开始判回文。很明显,在一端去掉 $x$ 和在另一端的对称位置加上一个 $x$ 有相同的效果,所以在此处我们只采用去掉的方法。

从两边开始逼近,如果两端对称就各往中间走一个字符。如果不对称的话,若两边有一边是 $x$ ,则删去(即仅该侧向中间逼近)。若不对称且两侧均无 $x$ ,则直接退出。

下面就是代码哒☆

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int siz=s.size();       //读出字符串长度
    int l=0,r=siz-1;        //设定初始l,r
    int ans=0;
    while(l<r){
        if(s[l]==s[r])r--,l++;          //两端对称
        else if(s[l]=='x')l++,ans++;    //两端不对称,左端是 x
        else if(s[r]=='x')r--,ans++;    //两端不对称,右端是 x
        else puts("-1"),exit(0);        //两端不对称,两端均不为 x
    }
    cout<<ans<<endl;                    //输出答案
    return 0;   
}