文巾解题 面试题 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. 回文排列的主要内容,如果未能解决你的问题,请参考以下文章

面试题 01.04. 回文排列

面试题 01.04. 回文排列

文巾解题 面试题 01.02. 判定是否互为字符重排

程序员面试金典字符串面试题 01.04 - 回文排列

文巾解题 面试题 01.03. URL化

文巾解题 面试题 17.10. 主要元素