给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例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
栈
把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