面试题 01.04. 回文排列

面试题 01.04. 回文排列 #

题目 #

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典中的单词。

思路 #

  • s.length() 为奇数,只允许存在一个元素仅出现一次。
  • s.length() 为偶数,不允许出现存在次数为偶数的元素。

代码 #

class Solution {
    public boolean canPermutePalindrome(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        int numOdd = 0;
        for (Integer cnt: map.values()) if (cnt % 2 == 1) numOdd += 1;
        return s.length() % 2 == 0 ? numOdd = 0 : numOdd == 1;
    }
}