题解
2023-04-30 18:52:48
发布于:天津
42阅读
0回复
0点赞
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <cstdio>
using namespace std;
/*
我们把前半段和后半段分开,互相对应(正中间的不用管,因为他对应的是自己
注意回文是相反的,对应时也是相反的
我们只需要将两个串变为一样的,就是回文了
我们只能使用一次反转,所以所有不同点必须全挨在一块,否则要不反转不全,要不将本来就一样的反转了
检查是不是所有不同点全挨在一块就可以了
*/
const int N=1,inf=2147483647;
int T,n,m,cnt;
string s;
int main(){
cin>>T;
while(T--){
cin>>n;
cin>>s;
s="2"+s+"2";
m=n/2;
cnt=0;
for(int i=1;i<=m;i++){
if(s[i]!=s[n-i+1]&&s[i-1]==s[n-i+2])cnt++;
}
if(cnt>=2)cout<<"NO\n";
else cout<<"YES\n";
}
return 0;
}
这里空空如也
有帮助,赞一个