Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.
This is case sensitive, for example "Aa"
is not considered a palindrome here.
Note:
Assume the length of given string will not exceed 1,010.
Example:
Input: "abccccdd" Output: 7 Explanation: One longest palindrome that can be built is "dccaccd", whose length is 7.
思路:出现次数为偶的,可用;出现次数为奇数的,可用(出现次数-1),假如有奇数,记得最后加一。
代码1:
class Solution {
public:
int longestPalindrome(string s) {
map<char,int> m;
for(char ch:s){m[ch]++;}
int evensum=0;
bool flag=false;
for(auto i:m){
if(i.second%2){
evensum += (i.second-1);// aaa->aa
flag=true;
}
else{evensum += i.second;}
}
return (evensum+flag);
}
};
代码2:
class Solution {
public:
int longestPalindrome(string s) {
map<char,int> m;
for(char ch:s){m[ch]++;}
int res=0,odd=0;
for(auto mm:m){
if(mm.second%2){
res+=(mm.second-1);
odd=1;
}
else{res+=mm.second;}
}
return (res+odd);
}
};
代码3:
class Solution {
public:
int longestPalindrome(string s) {
int res = 0;
bool mid = false;
unordered_map<char, int> m;
for (char c : s) m[c]++;
for (auto it = m.begin(); it != m.end(); ++it) {
res += it->second;
if (it->second % 2 == 1) {
res -= 1;
mid = true;
}
}
return mid? res + 1 : res;
}
};