Skip to content

Latest commit

 

History

History
executable file
·
47 lines (35 loc) · 1.19 KB

409.md

File metadata and controls

executable file
·
47 lines (35 loc) · 1.19 KB

题目描述

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意: 假设字符串的长度不会超过 1010。

示例 1:

输入:
"abccccdd"

输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

class Solution {
    public int longestPalindrome(String s) {
        //A 为 65  z 为 122,所以构造一个长度为58的int数组
        int[] cnt = new int[58];
        for (char c : s.toCharArray()) {
            cnt[c - 'A'] += 1;
        }

        int ans = 0;
        for (int x: cnt) {
        // 字符出现的次数最多用偶数次。
        // (x & 1) 偶数为0,奇数为1
            ans += x - (x & 1);
        }
        // 如果最终的长度小于原字符串的长度,说明里面某个字符出现了奇数次,那么那个字符可以放在回文串的中间,所以额外再加一。
        return ans < s.length() ? ans + 1 : ans;  
    }
}