Leetcode P0266"Palindrome Permutation" 题解

2021/06/13 Leetcode

博文中会简要介绍Leetcode P0266题目分析及解题思路。

“Palindrome Permutation”是一道比较简单的题目。题目要求检查给定的字符串能否形成一个回文串。

Given a string s, return true if a permutation of the string could form a palindrome.

这道题的思路比较简单直接。我们只需要判断,若字符串长度为奇数,那么有且仅有一个字符,出现的次数为奇数,其余字符出现次数为偶数;若字符串长度为偶数,那么所有的字符出现次数都是偶数。

以下是Java的题解代码实现。

class Solution {
    public boolean canPermutePalindrome(String s) {
        int L = s.length(), limit = (L%2 == 0)? 0: 1;
        Map<Character, Integer> ch2CountMap = new HashMap<>();
        for (int i=0; i<L; ++i) {
            char c = s.charAt(i);
            ch2CountMap.put(c, ch2CountMap.getOrDefault(c, 0)+1);
        }
        
        for (int count: ch2CountMap.values()) {
            limit -= (count%2 == 0)? 0: 1;
        }
        
        return (limit == 0);
    }
}

以下是C++的题解代码实现。

class Solution {
public:
    bool canPermutePalindrome(string s) {
        int L = s.length(), limit = (L%2 == 0)? 0: 1;
        unordered_map<char, int> ch2count;
        for (char c: s) {
            ch2count[c] += 1;
        }
        
        for (auto entry: ch2count) {
            limit -= (entry.second%2 == 0)? 0: 1;
        }
        
        return (limit == 0);
    }
};

Search

    Table of Contents