面试题 01.04. 回文排列

image.png

巧用 set 记录字符出现次数

将问题转化为判断字符是否成对出现,只允许一个字符出现次数为奇数

  1. class Solution {
  2. // 要求一个字符中的字符出现次数为偶数,有且仅有一个字符出现次数为奇数次
  3. // 巧妙地使用 set 记录,如果 set 中不存在则 add,如果 set 中存在则 remove
  4. // 遍历完整个字符串如果 set 长度小于等于 1 则说明符合要求
  5. public boolean canPermutePalindrome(String s) {
  6. Set<Character> set = new HashSet<Character>();
  7. for (char c : s.toCharArray()) {
  8. if (set.contains(c)) {
  9. set.remove(c);
  10. } else {
  11. set.add(c);
  12. }
  13. }
  14. return set.size() <= 1;
  15. }
  16. }