- 最长回文串
题目来源:https://leetcode-cn.com/problems/longest-palindrome/
题目描述:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
解析:
统计每个字符的个数即可,双数才能构成回文串。如果刚好都两两成对,那么回文串长度就是成对字符的对数的2倍;如果有一个或以上的字符落单,那么回文串长度就是成对字符的对数的2倍+1。
class Solution {
public int longestPalindrome(String s) {
int count = 0;
if(s.length()==0)return count;
char [] chars = s.toCharArray();//用于存放字符
Set<Character> set = new HashSet<>();//用于存放未出现过的字符
for(int i = 0 ;i<s.length();i++){
//如果在set中找到该字符,就删除
if(set.contains(chars[i])){
set.remove(chars[i]);
count++;
}
//否则加入到set中
else{
set.add(chars[i]);
}
}
//偶数长度的回文串:set最终变为空
return set.isEmpty()?2*count:2*count+1;
}
}