1 条题解

  • 0
    @ 2026-1-30 12:34:24
    #include<bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n;
        cin >> n; // [1] 读取测试用例数量n
        while(n--){
            string s;
            cin >> s; // [2] 读取当前待判断的字符串
            int len = s.size();
            bool is_pal = true;
    
            // [3] 第一步:判断原字符串是否是回文(双指针基础解法)
            int l = 0, r = len - 1;
            while(l < r){
                if(s[l] != s[r]){
                    is_pal = false;
                    break;
                }
                l++;
                r--;
            }
            if(is_pal){
                cout << "Yes" << endl;
                continue;
            }
    
            // [4] 第二步:判断重新排列后能否构成回文(统计字符出现次数)
            int cnt[26] = {0}; // 统计26个小写字母的出现次数
            for(int i = 0; i < len; i++){
                cnt[s[i] - 'a']++;
            }
            int odd = 0; // 统计出现次数为奇数的字符数量
            for(int i = 0; i < 26; i++){
                if(cnt[i] % 2 != 0){
                    odd++;
                }
            }
            // 回文排列条件:最多1个字符出现奇数次
            if(odd <= 1){
                cout << "Yes" << endl;
            }else{
                cout << "No" << endl;
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    130
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者