最长回文串

最长回文串

一、题目描述

给定一个包含大写字母和小写的字符串s,返回通过这些字母构成的最长的回文串。在构造过程中,请注意区分大小写。
示例1

输入:s = "abccccdd"
输出:7

示例2

输入:s = "a"
输入:1

示例3

输入:s = "aaaaaccc"
输入:7

二、解题思路

最长回文,最长回文就是在所给字符串s中,去除一些字符,可以组成的最长的回文。其特点就是,只能存在一个为奇数次的字符。

三、解题方法

方法一(计数)
使用数组计数,记录每个s中字符出现的频次,由于字符出现偶数次一定可以构成回文,只需要记录不是偶数频次的字符即可。最后从s的总长度中减去不是偶数的频次,加上一个1,最后的1,就是可以将一个字符放在整个回文的最中间。
代码实现

class Solution {
    public int longestPalindrome(String s) {

        int[] arr = new int[128];
        for(char i : s.toCharArray()){
            arr[i]++;
        }

        int count = 0;
        for(int i: arr){
            count += i%2;
        }

        return count == 0 ? s.length() :(s.length() - count +1);


    }
}
posted @ 2022-11-26 13:29  z_coding  阅读(57)  评论(0)    收藏  举报