刷题记录 leetcode409:最长回文串
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
示例
输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
思路:如果字母出现的次数是偶数,可以直接用,如果是奇数,注意有两种情况,这个奇数如果大于1,可以减1变成偶数拿来用,但是如果只有一个字母是奇数或者这个奇数等于1,它可以被放在中间而不用减1。考虑到这种情况,可以把所有奇数都减1处理,如果最后的结果小于字符串长度,说明有个奇数应该被放在中间,再给结果加1
public int longestPalindrome(String s) { int[] cnts = new int[256]; for (char c : s.toCharArray()) { cnts[c]++; } int palindrome = 0; for (int cnt : cnts) { palindrome += (cnt / 2) * 2; // 偶数不变,奇数减1变成偶数 } if (palindrome < s.length()) { palindrome++; // 这个条件下 s 中一定有单个未使用的字符存在,可以把这个字符放到回文的最中间 } return palindrome; }
浙公网安备 33010602011771号