题目
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:“tactcoa”
输出:true(排列有"tacocat"、“atcocta”,等等)
解题思路
由题目可知,给定了一个重新排列后的回文串
- 不需要关注字符的顺序
- 只要字符的个数满足回文串的规则即可,能组成回文串的字符有2种情况:
- 所有字符的数量都是偶数
- 有且仅有一个字符的数量是奇数
- 使用哈希表记录数量是奇数的字符
代码
class Solution {
public boolean canPermutePalindrome(String s) {
Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
// 如果当前字符是偶数个,从哈希表中删除
if (map.getOrDefault(c, 0) % 2 == 1) map.remove(c);
// 如果当前字符是奇数个,保存到哈希表中
else map.put(c, map.getOrDefault(c, 0) + 1);
}
// 数量是奇数的字符的个数 > 1就不是回文串,否则是回文串
return map.size() <= 1;
}
}