给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。
示例 1:
输入:s = “abccccdd”
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
示例 2:输入:s = “a”
输入:1提示:
1 <= s.length <= 2000
s 只由小写 和/或 大写英文字母组成
读完题目乍一看本题很难搞的感觉
但仔细一想:这部有点类似于消消乐么?
于是想到了 Set 这种数据结构,不允许存储重复的元素
本题并不是让我们验证回文串,而是让我们求给定的字符串能够组合成
最长的回文串的长度
如果存在两个相同的元素,那么回文串的长度就是2,并且如果最终还剩下
一个单独的元素那么就+1即可
class Solution {
public int longestPalindrome(String s) {
int count=0;
Set<Character>set=new HashSet<>();
for(Character c:s.toCharArray()){
if(!set.contains(c)){
set.add(c);
}else{
set.remove(c);
count++;
}
}
return set.isEmpty() ? 2 *count : 2*count+1;
}
}