最长回文数

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12523816.html

最长回文数(50min)

题目链接:https://leetcode-cn.com/problems/longest-palindrome/

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

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

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

示例 1:

输入:
"abccccdd"

输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
题解:
方法:判断字符串中偶数字母和奇数字母。
思路:
此题需要考虑好几种情况:
1.字符串中是偶数的字母个数一定可以组成回文数。
2.字符串中是奇数个数字母分两种情况:
1)只有一个字母,可以把单独一个字母放在回文数中间。这种情况时,判断完偶数字母后,最后加上1即为总的回文数。
2)字母个数为奇数时,其中的偶数个一定可以组成回文数。这种情况时,奇数个数减1即为偶数个数。
3.字符串长度为0,不能组成回文数。
注意:
1.题目区分大小写字母。
2.因为字母个数为奇数时,不知道是奇数是由字符串中只有一个字母得来的,还是字符串中只有一个字母且为奇数个数例如aaa,这两种情况,最后结果都需要加1,所以一个flag变量,当出现这两种情况时,把flag赋值为1,最后判断,如果flag=1时,最后结果才加1.
代码如下:
class Solution {
    public int longestPalindrome(String s) {
        int [] str=new int [52];
        for(int i=0;i<s.length();i++)//统计字符串中的字母个数
        {
            char cha=s.charAt(i);
            if(cha>='a'&&cha<='z')
                str[cha-'a']++;
            else 
                 str[cha-'A'+26]++;
        }
        int flag=0;
        int count=0;
        for(int i=0;i<52;i++)
        {
            if(str[i]==1)
               flag=1;
            else if(str[i]==0)
                continue;
            else 
            {
                if(str[i]%2==0)
                    count+=str[i];
                else 
                {
                    count+=str[i]-1;
                    flag=1;
                }
            }
        }
        if(flag==1)
            count++;
        return count;

    }
}

 

           
posted @ 2020-03-19 13:37  萍2樱释  阅读(426)  评论(0编辑  收藏  举报