Leetcode409. 最长回文串(C语言)
数据结构-字符串:算法与数据结构参考
题目:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造中注意区分大小写。例:
输入:“abccccdd”
输出:7
解释:可构造的最长的回文串是"dccaccd", 它的长度是 7。
思路:
构造哈希表,看每个元素数量的奇偶性。
注意不止一个元素奇数个数的处理
代码:
int longestPalindrome(char* s)
{
int n=strlen(s); //直接调函数
int tmp[52]={0}; //26*2,大小写字符
for(int i=0;i<n;i++) //构造哈希表
{
if(s[i]>='a' && s[i]<='z') tmp[s[i]-'a']++;
else tmp[s[i]-'A'+26]++;
}
for(int i=0;i<52;i++) //每次遇到奇数减1,构成偶数(必能构成回文)
if(1==tmp[i]%2) n--;
if(n==strlen(s)) return n; //无奇数
else return n+1; //有奇数,加上最中间的1
}