原文题目:
解题:
要找最长的回文串,思路就是建立一个字典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; } };