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;
    }
}

原文地址:https://www.cnblogs.com/zyoung/p/6860167.html