2023年1月12日 星期四

409. Longest Palindrome

解題思路

因為字串可能同時有大小寫字母,所以不能只開長度 26 的 array 來計數。不過 ascii code 本身的值介於 0 ~ 127 之間,所以就開 128 長度 array 即可。

另外,構成回文的條件,就是偶數一定可以都用上(左右各半),奇數多出來的那個數字,最多只能用一次(放在正中間)。

程式碼

class Solution {
public:
    int longestPalindrome(string s) {
        int index[128] = {0};
        for(int i=0; i<s.size(); i++)
            index[s[i]]++;
        
        int length = 0;
        bool hasOdd = false;
        for(int i=0; i<128; i++)
        {
            length += index[i] / 2 * 2;
            if(index[i] % 2)
                hasOdd = true;
        }
        if(hasOdd)
            length += 1;
        return length;
    }
};

沒有留言:

張貼留言