题目链接:https://leetcode.com/problems/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:
- Consider the palindromes of odd vs even length. What difference do you notice?
- Count the frequency of each character.
- If each character occurs even number of times, then it must be a palindrome. How about character which occurs odd number of times?
思路:提示给了很明显的答案,如果所有的字符都出现偶数次,那么肯定可以回文.如果只有一个字符出现奇数次,肯定也可以回文.因此我们只要用一个hash表来记录每个字符的个数,最后再统计一下奇数字符的数目即可.
代码如下:
class Solution {
public:
bool canPermutePalindrome(string s) {
unordered_map<char, int> hash;
for(auto ch: s) hash[ch]++;
int num = 0;
for(auto val: hash)
if(val.second % 2) num++;
return num <= 1;
}
};