LeetCode 题解(241) : Palindrome Permutation

题目:

Given a string, determine if a permutation of the string could form a palindrome.

For example,
"code" -> False, "aab" -> True, "carerac" -> True.

Hint:

  1. Consider the palindromes of odd vs even length. What difference do you notice?
  2. Count the frequency of each character.
  3. If each character occurs even number of times, then it must be a palindrome. How about character which occurs odd number of times?
题解:

HashMap,奇数个的character的种类不能超过1.

C++版:

class Solution {
public:
    bool canPermutePalindrome(string s) {
        unordered_map<char, int> d;
        for(auto i : s) {
            if(d.find(i) != d.end())
                d[i]++;
            else
                d.insert(pair<char, int>(i, 1));
        }
        
        bool already = false;
        for(auto i = d.begin(); i != d.end(); i++) {
            if(i->second % 2 != 0) {
                if(already)
                    return false;
                else
                    already = true;
            }
        }
        return true;
    }
};

Java版:

public class Solution {
    public boolean canPermutePalindrome(String s) {
        HashMap<Character, Integer> d = new HashMap<>();
        for(int i = 0;i < s.length(); i++) {
            if(d.containsKey(s.charAt(i)))
                d.put(s.charAt(i), d.get(s.charAt(i)) + 1);
            else
                d.put(s.charAt(i), 1);
        }
        
        boolean already = false;
        for(Character i : d.keySet()) {
            if(d.get(i) % 2 != 0) {
                if(already)
                    return false;
                else
                    already = true;
            }
        }
        return true;
    }
}

Python版:

class Solution(object):
    def canPermutePalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        d = {}
        for i in s:
            if i in d:
                d[i] += 1
            else:
                d[i] = 1
                
        already = False
        for i in d:
            if d[i] % 2 != 0:
                if already:
                    return False
                else:
                    already = True
        return True

你可能感兴趣的:(Algorithm,LeetCode,面试题)