美文网首页
409. 最长回文串

409. 最长回文串

作者: 等不了天明等时光 | 来源:发表于2020-03-19 12:31 被阅读0次

    解题思路

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

    代码

    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
    

    相关文章

      网友评论

          本文标题:409. 最长回文串

          本文链接:https://www.haomeiwen.com/subject/jtokyhtx.html