【力扣】409. 最长回文串

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

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

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

示例 1:

输入:
“abccccdd”

输出:
7

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

解答一:

class Solution {
    public int longestPalindrome(String s) {
        if(s.length() == 0) return 0;
        if(s.length() == 1) return 1;
        char[] c = s.toCharArray();
        Arrays.sort(c);
        int count1 = 0, count2 = 0;//1-奇数2-偶数
        for(int i = 1; i < c.length; i++)
            if(c[i - 1] == c[i]){
                count2 += 2;
                if(i == c.length - 1) break;
                if(i == c.length - 2) {
                    count1++; 
                    break;
                }
                i++;
            }else count1++;
        return count1 == 0 ? count2 : count2 + 1;
    }
}

解答二:

class Solution {
    public int longestPalindrome(String s) {
        int sum = 0;
        boolean flag = false;
        int[] nums = new int[52];
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') nums[s.charAt(i) - 'A']++;
            else nums[s.charAt(i) - 'a' + 26]++;
        }
        for(int i = 0; i < 52; i++){
            if(nums[i] % 2 == 0) sum += nums[i];
            else{
                sum += (nums[i] - 1);
                flag = true;
            }
        }
        return flag == true ?  sum + 1 : sum;
    }
}
发布了233 篇原创文章 · 获赞 254 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_44485744/article/details/104978758