面试题 01.04. 回文排列

137 阅读1分钟

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

示例1:

输入:"tactcoa"
输出:true(排列有"tacocat""atcocta",等等)

题目链接:leetcode-cn.com/problems/pa…

字典

用python自带函数构造字典

自字符串里没有一对的字母最多只能有一个:"abcba","aabbcccbbaa","abba"

那就是去数每个字符的数数量

python里有Counter去把字符串转成字典,键是每个字符串里的字母,值是数量,就有代码


class Solution(object):
    def canPermutePalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        res = 0
        for i in Counter(s).values():
            if i % 2 != 0:
                res +=1
        return res <= 1

image.png

把str转成list

s = list(s)

用sort排序

s.sort()

然后就可以操作把list一个个放进栈,如果放进去的下一个和之前放进去的一样就消除,最后判断栈长度小于等于1

就有了这样的代码


class Solution(object):
    def canPermutePalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = list(s)
        s.sort()
        stack = []
        for i in s:
            if not stack or stack[-1] != i:
                stack.append(i)
            else:
                stack.pop()
        return len(stack)<=1

image.png