409. 最长回文串

解题思路

既然是求最长回文串,那么左右字符个数应该对称。对于偶数个字符来说,正好可以左右排列;而对于奇数个字符来说,除了左右排列需要的偶数个字符外,还要有一个中心点。注意,对于所有的奇数字符,回文串只需一个中心点就够了。如果左右对称字符个数之和小于原串长度,说明有奇数个字符,最后需要加上一个中心点;否则就全为偶数个字符。

代码

class Solution:
    def longestPalindrome(self, s: str) -> int:
        if not s:
            return 0
        dic = {}
        for i in s:
            if i in dic:
                dic[i] += 1
            else:
                dic[i] = 1
        countA = 0
        countB = 0
        # 记录中心点左右对称的字符个数
        for j in dic:
            if dic[j] % 2 == 0:
                countA += dic[j] # 偶数字符个数
            else:
                countB += dic[j]-1 # 奇数字符个数减去1个中心点
        # 有奇数个字符
        if countA+countB<len(s):
            return countA+countB+1
        # 全为偶数个字符
        else:
            return countA
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 难度:★☆☆☆☆类型:字符串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。...
    玖月晴阅读 4,681评论 0 0
  • 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如...
    不胖二十斤不改名zz阅读 1,209评论 0 0
  • 题目 我刚开始的想法 因为题目要求的是输出长度,并不需要将最长的回文字串数出来,所以很显然是一道找规律的题目,回文...
    雇个城管打天下阅读 1,820评论 0 0
  • 题目描述 409. 最长回文串 思路 题目不难,就是所有的坑我都踩进去了。"abccccdd" -> a: 1, ...
    lazy_ccccat阅读 864评论 0 0
  • 方法一:暴力匹配 (Brute Force) 暴力解法虽然时间复杂度高,但是思路清晰、编写简单,因为编写的正确性高...
    李威威阅读 4,181评论 0 0