已知一个只包括大小写字符的字符串,求用该字符串中的字符可以生成的最长回文字符串的长度。
例如 s=“abccccddaa”,可生成的最长回文字符串长度为9,如dccaaaccd,adccbccda,acdcacdca等,都是正确的。
- 利用字符哈希方法,统计字符串中所有的字符数量;
- 设置最长回文串偶数字符长度为max_length=0;
- 设置是否有中心点标记flag=0;
- 遍历每一个字符,字符数为count,若count为偶数,max_length+=count;若count为奇数,max_length+=count-1, flag=1;
- 最终最长回文子串长度: max_length+flag。
#include <string>
class Solution
{
public:
Solution(){}
~Solution(){}
int longestPalindrome(std::string s)
{
int max_length = 0;
int flag = 0;
int char_map[128] = { 0 };
for (int i = 0; i < s.length(); i++)
{
char_map[s[i]]++;
}
for (int i = 0; i < 128; i++)
{
if (char_map[i]%2==0)
{
max_length += char_map[i];
}
else
{
max_length += char_map[i] - 1;
flag = 1;
}
}
return max_length + flag;
}
};
int main()
{
std::string s = "abccccddaa";
Solution solve;
printf("%d\n", solve.longestPalindrome(s));
return 0;
}
运行结果为:
9