409. Longest Palindrome
原文题目:
解题:
要找最长的回文串,思路就是建立一个字典char:int的map,遍历目标字符串,统计各个字符的个数,如果该字符有偶数个,那必然可以组成回文串,如果该字符是奇数个,那么就只能向下取偶了,同时还要加1,因为一个字符可以组成回文串,比如aaaff,那么就是faaaf这种,所以要特殊处理的就是奇数个数的字符,出现多个奇数个数字符时,总长度也只加1,所以可以在奇数个数字符出现时设置一个标志位。
AC代码:
class Solution {
public:
int longestPalindrome(string s)
{
if(s == "")
{
return 0;
}
int i = 0;
int odd = 0;
int even = 0;
int flag = 0;
map <char,int> maptmp;
map <char,int>::iterator it;
for(i =0; i< s.length();i++)
{
maptmp[s[i]]++;
}
for(it = maptmp.begin();it != maptmp.end();it++)
{
if(it->second %2 == 1)
{
odd += (it->second)/2;
flag = 1;
}
else
{
even += it->second;
}
}
return flag?(even+2*odd+1):even;
}
};
浙公网安备 33010602011771号