leetcode链接:回文排列
思路:回文串两种可能。只有一个字符出现1次其他字符都是偶数次。要么都是偶数次。统计字母的个数即可。
代码:
bool canPermutePalindrome(char* s){
// 回文串两种可能
// 1. 只有一个字符出现1次其他字符都是偶数次
// 2. 要么都是偶数次
char ascii[128] = {0};
int i = 0;
while (s[i]) {
ascii[s[i]]++;
i++;
}
int count = 0;
for (int i = 0; i < 128; i++) {
// 字母太多时候 上面计数溢出 127 + 1 = -128 所以要考虑 % 2 == 1 或 % 2 == -1
if (abs(ascii[i] % 2) == 1) {
count++;
}
if (count > 1) {
return false;
}
}
return true;
}