P12592 重生有惊喜 题解

· · 题解

题目大意

这一题很简单,先看题目

题目的意思是说要求变换字母顺序,使得变换后的字符串成为回文串

做题思路

我们可以先用一个字符桶数组来保存原字符串的每一个字符出现的次数,然后判断每个字符出现的次数mod 2==0 如果mod 2==1 累加次数,如果mod 2==1只有1次,说明要把这个字符放在原字符串的正中间

AC代码


#include<bits/stdc++.h>
using namespace std;
int main(){
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    //ios::sync_with_stdio(false);
    //cin.tie(0);
    //cout.tie(0);
    int T;
    cin>>T;
    while(T--){//T组数据
        string a;
        cin>>a;
        int t[30]={0};
        for(int i=0;i<a.size();i++){
            t[a[i]-'a']++;//统计字母出现次数
        }
        int flag=0;
        for(int i='a';i<='z';i++){
            if(t[i-'a']%2){//累加和
                flag++;
            }
        }
        if(flag<=1) puts("Yes");//是回文串
        else puts("No");
    }
    return 0;
}