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