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