给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
思路:
创建一个哈希表,把字母放入并且统计字母出现的次数。遍历哈希表,加上每个字母出现的次数。如果是奇数那么结果就减去1,同时我们设置一个flag,如果出现次数有奇数那么flag设置为true。返回判断flag是真还是假,是真结果+1,偶数不加。
class Solution {
public:
int longestPalindrome(string s) {
unordered_map<char,int>map;
bool flag=false;
int res=0;
for(auto c:s){
++map[c];
}
for(auto iter=map.begin();iter!=map.end();++iter){
res+=iter->second;
if(iter->second%2==1){
res-=1;
flag=true;
}
}
return flag?res+1:res;
}
};