也是挺巧妙的题目,我以为是找s的最长回文串,没想到是把s组成最大的回文串。
不看答案我想不出,毕竟最近有点笨,哈希表记录每个字符的出现次数。因为是回文串,所以有aba和abba这两种,出现次数是偶数次的一定可以全部拿来贡献回文串,奇数次的-1可以用来贡献。而且因为有aba这种,所以如果有出现奇数次的,最后最大长度还得要加上1
class Solution {
public:
int longestPalindrome(string s) {
//用哈希记录每个字符出现的次数
//因为组成回文子串的情况是两种bab这种中间一个字符的,或者baab这种中间两个字符的
//我们把maxlen加上偶数字符出现了几次,然后再考虑奇数字符,因为奇数字符-1后也是偶数字符,所以我们再加上每个奇数字符-1后的出现次数。如果有奇数字符出现的话,最后长度加上1,因为bab这种
unordered_map<char,int> ma;
for(char c: s){
ma[c]++;
}
int maxLen = 0;
bool flag = false;
//这个it不是迭代器,这个it是一个pairs,所以用.而不是->
for(auto it : ma){
if(it.second % 2 == 0){
maxLen += it.second;
}
else{
maxLen += it.second-1;
flag = true;
}
}
return flag ? maxLen+1:maxLen;
}
};