leetcode 409. Longest Palindrome

本文介绍了一种求解给定字符串中最长回文子串长度的方法,通过使用Python中的Counter来统计字符出现次数,并根据回文串特性设计算法实现最长回文长度计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

409. Longest Palindrome



求给定一个字符串的最长回文字符串的长度。


Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.

This is case sensitive, for example "Aa" is not considered a palindrome here.

Note:

Assume the length of given string will not exceed 1,010.

Example:

Input:
"abccccdd"

Output:
7

Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.




class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: int
        """

#第一次提交的,错误,分析原因是,只考虑了一个奇数的字母,但是有多个奇数的字母时,这些字母都可以用
#比如字符串中包含aaabbbccccccc,我可以取6个c,2个a,2个b。最终加1.
#那么这样一分析,就可以认为,如果遇到偶数个数,直接加起来,如果是奇数odd,加上odd-1,遍历完所有个数,再加上摆在最中间的一个,直接加1就可以
        from collections import Counter
        count=Counter(s)
        odd=[]
        length=0
        for item in count.iteritems():
            if item[1]%2==0:
                length+=item[1]
            else:
                odd.append(item[1])
        return length if len(odd)==0 else length+max(odd)

#下面是第二次提交的正确代码(可以整理的更简洁)
     def longestPalindrome1(self, s):
     
        from collections import Counter
        count=Counter(s)
        odd=[]
        length=0
        flag=False
        for item in count.iteritems():
            if item[1]%2==0:
                length+=item[1]
            else:
                flag=True
                length+=item[1]-1
        return length if flag==False else length+1


#这个是社区的代码,主要和上面的思路一样
def longestPalindrome(self, s):
     odds = sum(v & 1 for v in collections.Counter(s).values())    V&1是判断v是否为奇数的,
     return len(s) - odds + bool(odds)          bool(odds)#是用来最终加1的,如果odds非0就加1,为0就加0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值