LeetCode - 409. Longest Palindrome
链接
题意
给定一个包含大小写的字符串,计算这些字母能组成的最长的回文串的长度。
样例
Input:
"abccccdd"
Output:
7
Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.
思路
将每个字母转为数字作为数组下标,值为出现的次数。次数大于等于2的偶数部分即可构成回文串的一部分。此时注意,若字符串中至少存在一个奇数次数字母,则回文串的长度可加1(作为中间字母)
代码
Java:
public class Solution {
public int longestPalindrome(String s) {
// 大小写共52个
int[] arr = new int[52];
// 记录偶数字母个数
int count = 0;
// 记录奇数字母个数
int single = 0;
for (int i = 0; i < s.length(); i++) {
// 若为大写字母
if (s.charAt(i) < 'Z') {
// 下标从26开始
arr[s.charAt(i) - 'A' + 26]++;
} else {
// 小写字母下标从0开始
arr[s.charAt(i) - 'a']++;
}
}
for (int i = 0; i < arr.length; i++) {
count += arr[i] / 2;
single += arr[i] % 2;
}
return single > 0 ? count * 2 + 1 : count * 2;
}
}