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.
题目链接:https://leetcode-cn.com/problems/longest-palindrome/
思路
回文除了中间的字符外,两边的字符都是成对出现的,因此对串的字符出现次数统计,然后计算成对的字符。
class Solution {
public:
int longestPalindrome(string s) {
if(s.size()==0) return 0;
map<char,int> record;
for(int i=0; i<s.size(); ++i){
++record[s[i]];
}
int res = 0;
bool hasSingle = false;
for(auto iter=record.begin(); iter!=record.end();++iter){
int num = iter->second;
if(num == 1){
hasSingle = true;
}else {
res += num / 2 * 2;
hasSingle = (num%2==1)?true:hasSingle;
}
}
if(hasSingle) ++res;
return res;
}
};

本文探讨了如何从给定字符串中找出能构建的最长回文串长度,通过统计字符出现次数并计算成对字符,实现高效算法解决。示例输入abccccdd,输出为7,解释为最长回文串dccaccd。
875

被折叠的 条评论
为什么被折叠?



