27
27
28
28
<!-- 这里可写通用的实现逻辑 -->
29
29
30
- 利用 HashMap(字典表)统计每个字符出现的频率,至多有一个字符出现奇数次数即可。
30
+ ** 方法一:数组**
31
+
32
+ 创建一个长度为 $26$ 的数组,统计每个字母出现的频率,至多有一个字符出现奇数次数即可。
33
+
34
+ 时间复杂度 $O(n)$,空间复杂度 $O(26)$。其中 $n$ 是字符串的长度。
35
+
36
+ ** 方法二:哈希表**
37
+
38
+ 利用哈希表来维护元素。遍历字符串每个字母 $s[ i] $,若 $s[ i] $ 在哈希表中,则将 $s[ i] $ 从哈希表中删除,否则将 $s[ i] $ 加入哈希表。
39
+
40
+ 遍历结束,若哈希表中元素个数不超过 $1$,则返回 true,否则返回 false。
41
+
42
+ 时间复杂度 $O(n)$,空间复杂度 $O(26)$。其中 $n$ 是字符串的长度。
31
43
32
44
<!-- tabs:start -->
33
45
38
50
``` python
39
51
class Solution :
40
52
def canPermutePalindrome (self , s : str ) -> bool :
41
- counter = Counter(s)
42
- return sum (e % 2 for e in counter.values()) < 2
53
+ return sum (v % 2 for v in Counter(s).values()) <= 1
43
54
```
44
55
45
56
### ** Java**
@@ -49,15 +60,15 @@ class Solution:
49
60
``` java
50
61
class Solution {
51
62
public boolean canPermutePalindrome (String s ) {
52
- int [] counter = new int [26 ];
63
+ int [] cnt = new int [26 ];
53
64
for (char c : s. toCharArray()) {
54
- ++ counter [c - ' a' ];
65
+ ++ cnt [c - ' a' ];
55
66
}
56
- int oddCnt = 0 ;
57
- for (int cnt : counter ) {
58
- oddCnt += cnt % 2 ;
67
+ int n = 0 ;
68
+ for (int v : cnt ) {
69
+ n += v % 2 ;
59
70
}
60
- return oddCnt < 2 ;
71
+ return n < 2 ;
61
72
}
62
73
}
63
74
```
@@ -68,11 +79,11 @@ class Solution {
68
79
class Solution {
69
80
public:
70
81
bool canPermutePalindrome(string s) {
71
- vector<int > counter (26);
72
- for (auto & c : s) ++counter [ c - 'a'] ;
73
- int oddCnt = 0;
74
- for (int& cnt : counter) oddCnt += cnt % 2 ;
75
- return oddCnt < 2;
82
+ vector<int > cnt (26);
83
+ for (char & c : s) ++cnt [ c - 'a'] ;
84
+ int n = 0;
85
+ for (int& v : cnt) n += v & 1 ;
86
+ return n < 2;
76
87
}
77
88
};
78
89
```
@@ -81,18 +92,38 @@ public:
81
92
82
93
```go
83
94
func canPermutePalindrome(s string) bool {
84
- counter := make([]int, 26)
85
- for i := range s {
86
- counter[s[i] -'a']++
95
+ cnt := make([]int, 26)
96
+ for _, c := range s {
97
+ cnt[c -'a']++
87
98
}
88
- oddCnt := 0
89
- for _, cnt := range counter {
90
- oddCnt += cnt % 2
99
+ n := 0
100
+ for _, v := range cnt {
101
+ n += v & 1
91
102
}
92
- return oddCnt < 2
103
+ return n < 2
93
104
}
94
105
```
95
106
107
+ ### ** JavaScript**
108
+
109
+ ``` js
110
+ /**
111
+ * @param {string} s
112
+ * @return {boolean}
113
+ */
114
+ var canPermutePalindrome = function (s ) {
115
+ let ss = new Set ();
116
+ for (let c of s) {
117
+ if (ss .has (c)) {
118
+ ss .delete (c);
119
+ } else {
120
+ ss .add (c);
121
+ }
122
+ }
123
+ return ss .size < 2 ;
124
+ };
125
+ ```
126
+
96
127
### ** ...**
97
128
98
129
```
0 commit comments