题目描述
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
题目分析
用map用习惯了
首先遍历字符串s存到一个map里:
a 1
b 1
c 4
d 2
如果有奇数不管是1还是3。最终结果应该都是奇数,加一预定
然后就是有多少对相同的加多少
比如:
dddd 四个(2对+4)
ccccc 五个(2对+4)
具体操作:遍历这个map value为奇数就减一加到结果里 偶数直接加进去
代码
Java:
class Solution {
public int longestPalindrome(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for(int i=0; i<s.length(); ++i)
{
if(map.containsKey(s.charAt(i)))
map.put(s.charAt(i),map.get(s.charAt(i))+1);
else
map.put(s.charAt(i),1);
}
int flag = 0;//有没有1
int result = 0;
for (Character key : map.keySet())
{
int m = map.get(key);
if(m%2 == 0)
{
result += m;
}
else if(m%2 == 1)
{
flag = 1;
--m;
result += m;
}
}
return result+flag;
}
}