leetcode 面试题01.04 回文排列

⭐️ 题目描述

在这里插入图片描述


? 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;
}