February——面试题 01.04. 回文排列

class Solution:
    def canPermutePalindrome(self, s: str) -> bool:
        #hash表思想
        count = collections.Counter(s)
        res = 0
        #如果是回文数的话,那么value应该都是偶数,至多出现一个奇数,所有奇数如果出现的次数大于1就不是回文
        for value in count.values():
            if value % 2: 
                res += 1
                if res > 1 : 
                    return False
        return True

        #消消乐的思想,回文的话必须成对出现,如果成对出现就消掉
        S = set()
        for char in s:
            if char not in S:
                S.add(char)
            else:
                S.remove(char)
        
        #如果字符串的长度是奇数的话,那么就允许最后生一个孤儿元素,否则就不剩
        return len(S)<=1
  • 回文串的定义不用多说,两种方法
    • 消消乐
      • 如果是回文字符串肯定是成对出现的,那就把所有成对的全部敲掉,最后最多剩一个孤儿元素
    • hash表 
      • 做统计,单独元素至多有一个,如果这个元素超过俩就不是回文串了

猜你喜欢

转载自blog.csdn.net/weixin_37724529/article/details/113741954
今日推荐