leetcode 409 最长回文串
给定一个包含大写字母和小写字母的字符串 s ,返回 _通过这些字母构造成的 **最长的回文串**_ 。
题目
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
示例 1:
输入: s = "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
示例 2:
输入: s = "a" 输入: 1
示例 3:
输入: s = "aaaaaccc" 输入: 7
提示:
1 <= s.length <= 2000s只由小写 和/或 大写英文字母组成
思路
使用哈希表统计每个字符出现的次数,一旦出现了 2 次,则将结果 res + 2,并将哈希表中当前字符的统计次数删除,直到最后判断哈希表中是否是空,如果是空,表示全部字符都可以出现了 2 的倍数次,如果不为空,则可以将单个出现的字符作为回文的中心,结果 res 再 + 1
代码
class Solution {
public int longestPalindrome(String s) {
int res = 0;
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int count = map.getOrDefault(c, 0);
if (count == 1) {
res += 2;
map.remove(c);
} else {
map.put(c, 1);
}
}
return res + (map.isEmpty() ? 0 : 1);
}
}