Description

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

Example

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

Solution

计算每个character出现的个数,如果string的长度是偶数,所有character都应该成对出现,如果string的长度是奇数,有且仅有一个character出现奇数次

class Solution {
    public boolean canPermutePalindrome(String s) {
        if (s == null || s.length() == 0) {
            return true;
        }
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int count = 0;
        for (char c : s.toCharArray()) {
            map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);
            if (map.get(c) % 2 == 1) {
                count++;
            } else {
                count--;
            }
        }

        return s.length()%2 == 0 ? count == 0 : count == 1;
    }
}

优化一下,不用hashmap也不用count,用一个set就够了,每遍历一个character,如果set里面存在了,把它remove掉,不存在的话加进去,最后看set的size就好了,非0即1

results matching ""

    No results matching ""