给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa" 输出:true(排列有"tacocat"、"atcocta",等等)
用哈希表存储每个字符出现的次数。若次数为奇数的字符超过 1 个,则不是回文排列。
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
counter = collections.Counter(s)
cnt = 0
for val in counter.values():
if (val & 1) == 1:
cnt += 1
if cnt > 1:
return False
return True
class Solution {
public boolean canPermutePalindrome(String s) {
Map<Character, Integer> counter = new HashMap<>();
for (int i = 0, n = s.length(); i < n; ++i) {
char c = s.charAt(i);
counter.put(c, counter.getOrDefault(c, 0) + 1);
}
int cnt = 0;
for (int val : counter.values()) {
if ((val & 1) == 1) {
++cnt;
}
if (cnt > 1) {
return false;
}
}
return true;
}
}
func canPermutePalindrome(s string) bool {
m := make(map[rune]bool)
count := 0
for _, r := range s {
if m[r] {
m[r] = false
count--
} else {
m[r] = true
count++
}
}
return count <= 1
}