leetcode 409.longest palindrome


class Solution {
public:
int longestPalindrome(string s) {
vector vc(60, 0);
int i = 0;
while (i < s.size()) {
++vc[s[i]-‘A’];
++i;
}
i = 0;
int len = 0;
while (i < 60) {
if (vc[i] != 0 && vc[i] % 2 == 0) {
len += vc[i];
vc[i] = 0;
}
// 一开始想错了,以为是奇数个的,只能用最多的那个奇数,其实所有出现次数大于1的奇数,都可以通过减1变成偶数个从而加入最长回文串内
if (vc[i] % 2 == 1 && vc[i] > 1) {
len += vc[i] - 1;
vc[i] = 1;
}
++i;
}
i = 0; // 所有的遍历完之后,发现还有有的数还有一次机会,那就放到最中间去,len++,变成最长回文串
while (i < 60) {
if (vc[i] != 0) {
++len;
break;
}
++i;
}
return len ;
}
};