1 条题解
-
0
#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
- 上传者