leetcode 409 最长回文串

发布于 2023-02-05
给定一个包含大写字母和小写字母的字符串 s ,返回 _通过这些字母构造成的 **最长的回文串**_ 。

题目

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。

在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。

示例 1:

输入: s = "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

示例 2:

输入: s = "a" 输入: 1

示例 3:

输入: s = "aaaaaccc" 输入: 7

提示:

  • 1 <= s.length <= 2000
  • s 只由小写 和/或 大写英文字母组成

思路

使用哈希表统计每个字符出现的次数,一旦出现了 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);
    }
}