266. 回文排列
给定一个字符串,判断该字符串中是否可以通过重新排列组合,形成一个回文字符串。
示例 1:
输入: "code"
输出: false
示例 2:
输入: "aab"
输出: true
示例 3:
输入: "carerac"
输出: true
解法:遍历
重新排列后能组成回文串,必然满足一下两点之一
-
对于偶数串而言,每个字符都重复,且都是偶数倍
如:
abba
-
对于奇数串而言,除中间连着的相同字符是奇数个外,其他字符都重复,且都是偶数倍
如:
abbba
或aba
思想
复杂度
时间复杂度:
O
(
N
)
O(N)
O(N),
N
N
N 为 s
串长度
空间复杂度: O ( 1 ) O(1) O(1)
代码
class Solution {
public boolean canPermutePalindrome(String str) {
char[] s = str.toCharArray();
int[] map = new int[256];
int n = str.length();
for (int i = 0; i < n; i++) {
map[s[i]]++;
}
for (int i = 0, j = 0; i < 256; i++) {
if (map[i] % 2 != 0) {
if (j == 0) j = 1;
else return false;
}
}
return true;
}
}