写在前面

  • 正确理解题意,例如示例2
  • 包含所有可用字母
  • 细节处理耗费较多时间

题目详情

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意:
假设字符串的长度不会超过 1010

示例 1:
输入: "abccccdd"
输出: 7
示例 2:
输入: "abccccceeedd"
输出: 7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7

ac代码

  • ​字符哈希法​
class Solution
{
public:
int longestPalindrome(string s)
{
int a[128] = {0};
int sum = 0;
int flag = 0;
for(int i = 0; i < s.size(); i++)
++a[s[i]];

for(int i = 0; i < 128; i++)
{
if(a[i] % 2 == 0)
sum += a[i];
if(a[i] %2 == 1)
{
flag = 1;
sum += a[i] - 1;
}
}
return sum + flag;
}
};
  • 知识点小结
  • 常见字母ASCII码​:​​0~9: [48, 57], A-Z: [65, 90], a: [97, 122]​
  • 大小规则:​​0~9<A~Z<a~z​