p44 最长回文字符串的长度 (leetcode 409)

Posted repinkply

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p44 最长回文字符串的长度 (leetcode 409)相关的知识,希望对你有一定的参考价值。

一:解题思路

解题方法:遍历一遍原始字符串,统计每个字母出现的次数,并统计有多少个奇数的字母。那么最后用不上的字母个数为奇数字母个数减1,最后减去它和0之间的最大值即可。Time:O(n),Space:O(k)

二:完整代码示例 (C++版和Java版)

C++:

class Solution 
{
public:
    int max(int a, int b) { return a > b ? a : b; }

    int longestPalindrome(string s) 
    {
        int d[256] = {0};
        int oddNum = 0;

        for (int i = 0; i < s.size(); i++)
        {
            d[s[i]]++;
        }

        for (int i = 0; i < 256; i++)
        {
            if (d[i] % 2 == 1) oddNum++;
        }

        int unUsed = max(0,oddNum-1);
        return s.length() - unUsed;
    }
};

C++11:

class Solution 
{
public:
    int max(int a, int b) { return a > b ? a : b; }

    int longestPalindrome(string s) 
    {
        int d[256] = {0};
        int oddNum = 0;

        for (auto c : s)
        {
            d[c]++;
        }

        for (auto count : d)
        {
            if (count % 2 == 1) oddNum++;
        }

        int unUsed = max(0,oddNum-1);
        return s.length() - unUsed;
    }
};

Java:

class Solution
{
    public int longestPalindrome(String s)
    {
           int[] d=new int[256];
           int oddNum=0;

           for(char c:s.toCharArray())
               d[c]++;
           for(int count:d)
               if(count%2==1)
                   oddNum++;
           
           int unUsed=Math.max(0,oddNum-1);
           return s.length()-unUsed;
    }
}

 

以上是关于p44 最长回文字符串的长度 (leetcode 409)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode409 最长回文串

leetcode每日一题:409. 最长回文串

leetcode 简单 第九十六题 最长回文串

LeetCode刷题-005最长回文子串

LeetCode 409. 最长回文串

leetcode 5 最长回文子串问题