给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
思路:
最长回文串:
“abccccdd” 对应的回文串可以是“ccdadcc”,“dccaccd”
对原串中的字符进行分析
1.统计出原串中每个字符出现的个数
可以使用哈希表(将字符串中出现的元素的ACCSI码作为数组下标映射hash表)
并统计出每个字符出现的次数
2.如果某个字符出现的次数为偶数a,则一定是回文串的子串
回文串长度+a
如果某个字符串出现的次数为奇数b,则回文串长度为b-1(不成对出现的那一个构成中心元素)
注:无论什么情况,中心元素只能有一个
class Solution {
public int longestPalindrome(String s) {
int[] hash_map=new int[128];
int max_length=0;
int flag=0;
char ch[]=s.toCharArray();
for(int i=0;i<s.length();i++){
hash_map[ch[i]]++;
}
for (int i=0;i<hash_map.length;i++){
if(hash_map[i]%2==0){
max_length+=hash_map[i];
}else{
max_length+=hash_map[i]-1;
flag=1;
}
}
return max_length+flag;
}
}