[LeetCode] Palindrome Permutation


Problem Description:

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?

Just check there are no more than 2 characters that appear an odd number of times in the string.

My C++ code using an array as a hash map is as follows.

1 class Solution {
2 public:
3     bool canPermutePalindrome(string s) {
4         int odd = 0, counts[256] = {0};
5         for (char c : s)
6             odd += ++counts[c] & 1 ? 1 : -1;
7         return odd <= 1;
8     }
9 };

BTW, Stefan has posted many nice solutions here, including the following one that uses bitset.

1 class Solution {
2 public:
3     bool canPermutePalindrome(string s) {
4         bitset<256> b;
5         for (char c : s) b.flip(c);
6         return b.count() < 2;
7     }
8 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM