最长回文串

题目描述

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

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

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

示例 1:

输入:
"abccccdd"

输出:
7

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

思路

通过分析,可以发现回文串根据中心位置对称,且最多在中心点有一个奇数字母

例如: 
acc   cca  
acc b cca 

所以我们只需要遍历数组,查找出偶数字母的数量,最后判断是不是有奇数个字母即可。

题解

列出一种比较容易理解的题解:

	public int fun1(String str){

        int[] count = new int[128];

        //遍历数组,查找出每个字符的数量
        for (char c : str.toCharArray()) {
            count[c]++;
        }

        //记录最大长度
        int max = 0;

        //判断是否有奇数个的字母
        boolean falg = false;

        for (int i : count) {

            //判断是否为偶数个
            if(i % 2 == 0){
                max += i;//偶数个直接加
            }
            else{
                falg = true;//若有奇数个,则置标志位为true
                max += i - 1;//奇数个减去1 则为偶数个
            }
        }
        //判断奇数标志位
        return falg == true ? max + 1 : max;
    }
posted @ 2022-06-07 08:00  清楚xc  阅读(29)  评论(0)    收藏  举报