解題思路
因為字串可能同時有大小寫字母,所以不能只開長度 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; } };
沒有留言:
張貼留言