409. 最長迴文串
給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的迴文串。
在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個迴文字符串。
注意:
假設字符串的長度不會超過 1010。
示例 1:
輸入:
“abccccdd”
輸出:
7
解釋:
我們可以構造的最長的迴文串是"dccaccd", 它的長度是 7。
執行用時 : 4 ms, 在Longest Palindrome的C++提交中擊敗了100.00% 的用戶
內存消耗 : 9.1 MB, 在Longest Palindrome的C++提交中擊敗了68.90% 的用戶
class Solution {
public:
int longestPalindrome(string s) {
map<char,int> m;
for(int i=0;i<s.size();i++){
if(m.count(s[i])) m[s[i]]++;
else m[s[i]]=1;
}
map<char,int>::iterator iter;
int count=0; //所有出現奇數次的字母,都只能減一次取偶數個,除了出現次數最多的那個奇數,放中間
for(iter = m.begin(); iter != m.end(); iter++){
int temp=iter->second;
if(temp%2==1) count++;
}
if(count>0) count-=1; // 一開始忽略了這個,直接減一提交出錯
// 因爲沒有計數爲奇數的字母存在,減一就不必要
return s.size()-count;
}
};