题解 CF798A 【Mike and palindrome】
posted on 2020-07-05 14:19:56 | under 题解 | 编辑 | 0
本题不难,但很坑!
思路:定义一个计数器。从0~s.size()/2-1遍历一遍,如果 s[i]!=s[s.size()-i-1]s[i]!=s[s.size()−i−1] ,这个计数器就加一。最后看看计数器是不是1(只要改一个字符)或者在 f(a)==0f(a)==0 和 a.size()a.size() % 2=12=1 的条件共同成立的情况下(因为这种条件成立了,字符串的长度必然是奇数,只要改中间那个字符就行了),输出YES,反之输出NO
AC CODE:
#include<iostream>
typedef long long ll;
using namespace std;
int f(string s){
int cnt=0;//计数器
for(int i=0;i<s.size()/2;i++) if(s[i]!=s[s.size()-i-1]) cnt++;
return cnt;
}//判断0~s.size()/2中有多少不回文的字符串
int main(){
string a;
cin>>a;//输入
if(f(a)==1||(f(a)==0&&a.size()%2)) cout<<"YES";
//YES的情况
else cout<<"NO";//NO的情况
return 0;
}