Loading... ## 题目 给定一个包含大写字母和小写字母的字符串 `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 ## 代码 ```java 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); } } ``` 最后修改:2023 年 02 月 05 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请我喝杯咖啡吧。