文巾解题 面试题 01.04. 回文排列
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文巾解题 面试题 01.04. 回文排列相关的知识,希望对你有一定的参考价值。
1 题目描述
2 解题思路
2.1 哈希表
创建一个哈希表,记录每个元素出现的次数。如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
d=dict()
for i in s:
if(i in d):
d[i]+=1
else:
d[i]=1
flag=0
for i in d.values():
if(i%2==1 and flag==0):
flag=1
elif(i%2==1 and flag==1):
return False
return True
2.2 集合
建立一个集合(列表也可以),如果元素在集合中,将元素删去,否则将元素加入集合中。
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
s1=set()
for i in s:
if(i in s1):
s1.remove(i)
else:
s1.add(i)
if(len(s1)>=2):
return False
return True
2.3 位运算
每一个元素代表了一位数字的0或者1(这一位数字是1向左移动 这个元素对应的ascii码位后的结果),讲不通的元素对应的数字异或在一块,那么相同的数字就会变成0.。最后判断最终结果的数字是不是只有一个1或者全是0.
判断是不是只有一个1可以用布莱恩-科尼根算法(文巾解题 461. 汉明距离_UQI-LIUWJ的博客-CSDN博客)
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
l=len(s)
d=dict()
for i in s:
if(i in d):
d[i]+=1
else:
d[i]=1
if(l%2==0):
for i in d.values():
if(i%2==1):
return False
else:
flag=0
for i in d.values():
if(i%2==1 and flag==0):
flag=1
elif(i%2==1 and flag==1):
return False
return True
以上是关于文巾解题 面试题 01.04. 回文排列的主要内容,如果未能解决你的问题,请参考以下文章