LeetCode刷题(五)

88 阅读1分钟

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

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

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

示例1:

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

java

class Solution {
    public boolean canPermutePalindrome(String s) {
        char[] arr = s.toCharArray();

        //定义双列集合,存储字符串中字符以及字符出现的次数
        HashMap<Character, Integer> hm = new HashMap<>();

        //遍历字符数组获取每一个字符,并将字符存储在双列集合中
        for(char c: arr) {
            
        //存储过程中要做判断,如果集合中不包含这个键,就将该字符当作键,值为1存储,如果集合中包含这个键,就将值加1存储
                if(!hm.containsKey(c)) {            //如果不包含这个键
                     hm.put(c, 1);
                }
                else{
                hm.put(c, hm.get(c) + 1);
                }
 
        }
        int cot = 0;
 
        //打印双列集合获取字符出现的次数
        for (Character key : hm.keySet()) {         //hm.keySet()代表所有键的集合
            if(hm.get(key)%2!=0){
                cot = cot +1;
            }
        }
        if(cot>1){
            return false;
        }
        else{
            return true;
        }

    }
}

python

class Solution(object):
    def canPermutePalindrome(self, s):
        dicta = {}
        for i in s:
            dicta[i]=s.count(i)
        cot = 0
        for value in dicta.values():
            if value%2!=0:
                cot=cot+1
        if cot>1:
            return False
        else:
            return True

基本思路就是判断字符串中每个字符出现的次数如果都是偶数,就返回true,如果有一个不是偶数也是true,超过一个就是false。