266. Palindrome Permutation
Given a string, determine if a permutation of the string could form a palindrome.
Example 1:
Input: "code"
Output: false
Example 2:
Input: "aab"
Output: true
Example 3:
Input: "carerac"
Output: true
方法1: hash
思路:
用hash记录每个字符出现的次数。一定要枚举好回文串的所有可能情况:关键的判断条件是,只有小于或等于一个字符可以出现奇数次,而其他的都只能出现偶数次。
易错点
- 关键条件要想清楚
- 要判断空串
Complexity
Time complexity: O(n)
Space complexity: O(n)
class Solution {
public:
bool canPermutePalindrome(string s) {
if (s.size() == 0) return true;
unordered_map<char, int> hash;
for (char c: s){
++hash[c];
}
int count = 0;
for (auto a: hash){
if (a.second % 2 == 1) count ++;
}
return count <= 1;
}
};
class Solution {
public:
bool canPermutePalindrome(string s) {
unordered_set<char> hash;
for (char c: s) {
if (hash.count(c)) hash.erase(c);
else hash.insert(c);
}
return hash.size() <= 1;
}
};