最长回文串
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
分析:
这道题目并不难,重点就是要能看出:构造回文串的长度是与同一字符出现的次数相关。我这里采用的是HashMap来记录出现次数。
代码:
public int longestPalindrome(String s) {
int k =0;
int length=0;
HashMap<Character,Integer> map = new HashMap<Character, Integer>();
for(int i=0;i<s.length();i++){
if(map.get(s.charAt(i))==null)
map.put(s.charAt(i),1);
else
map.put(s.charAt(i),map.get(s.charAt(i))+1);
}
for(Integer value: map.values()){
//先把所有字符出现的次数都按做偶数计算
length += value/2*2;
//当第一次出现奇数时加1
if(value%2 == 1 && length%2 == 0)
length++;
}
return length;