P12592题解
题目传送门
思路
由于题目中说了可以任意交换两个字符的位置,我们只需要判断这个字符串是否满足回文串的条件即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[30];
int main(){int T;cin>>T;while(T--){fill(a,a+29,0);//多测要清空string s;cin>>s;for(int i=0;i<s.size();i++){a[int(s[i]-96)]++;//统计a~z每个字符的个数}if(s.size()%2==1){//若字符串长度为奇数int flag=0;//代表字符串中每个字符的数量为奇数的个数for(int i=1;i<=26;i++){if(a[i]%2) flag++;//若为奇数,flag++}if(flag!=1) cout<<"No"<<endl;//由于长度为奇数的回文串中间会有一个单独的字符串,所以判断flag是否等于1else cout<<"Yes"<<endl;}else{int flag=0;//同样意思for(int i=1;i<=26;i++){if(a[i]%2) flag++;}if(flag!=0) cout<<"No"<<endl;//由于长度为偶数的回文串每个字符都两两相对,所以判断flag是否等于0else cout<<"Yes"<<endl;}}return 0;
}