给定一个字符串,判断该字符串中是否可以通过重新排列组合,形成一个回文字符串。
示例 1:
输入: "code"
输出: false
示例 2:
输入: "aab"
输出: true
示例 3:
输入: "carerac"
输出: true
方法一:数组
创建一个长度为
时间复杂度
方法二:哈希表
利用哈希表来维护元素。遍历字符串每个字母
遍历结束,若哈希表中元素个数不超过
时间复杂度
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
return sum(v % 2 for v in Counter(s).values()) <= 1
class Solution {
public boolean canPermutePalindrome(String s) {
int[] cnt = new int[26];
for (char c : s.toCharArray()) {
++cnt[c - 'a'];
}
int n = 0;
for (int v : cnt) {
n += v % 2;
}
return n < 2;
}
}
class Solution {
public:
bool canPermutePalindrome(string s) {
vector<int> cnt(26);
for (char& c : s) ++cnt[c - 'a'];
int n = 0;
for (int& v : cnt) n += v & 1;
return n < 2;
}
};
func canPermutePalindrome(s string) bool {
cnt := make([]int, 26)
for _, c := range s {
cnt[c-'a']++
}
n := 0
for _, v := range cnt {
n += v & 1
}
return n < 2
}
/**
* @param {string} s
* @return {boolean}
*/
var canPermutePalindrome = function (s) {
let ss = new Set();
for (let c of s) {
if (ss.has(c)) {
ss.delete(c);
} else {
ss.add(c);
}
}
return ss.size < 2;
};