题目:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa"
不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
解题思路:
计算每个字母出现的次数,获取每个字母出现的最大偶数,最后求和,
代码实现:
class Solution { public int longestPalindrome(String s) { int[] count = new int[52]; for (char c : s.toCharArray()) { if (c == Character.toLowerCase(c)) count[c - 'a'] ++; else count[c - 'A' + 26] ++; } int addi = 0, res = 0; for (int cnt : count) { if (cnt % 2 == 1) { addi = 1; res += (cnt - 1); } else { res += cnt; } } return res + addi; } }