23
23
<pre ><strong >输入:</strong > <code >" ; carerac" ; </code >
24
24
<strong >输出:</strong > true</pre >
25
25
26
-
27
26
## 解法
28
27
29
28
<!-- 这里可写通用的实现逻辑 -->
39
38
``` python
40
39
class Solution :
41
40
def canPermutePalindrome (self , s : str ) -> bool :
42
- mapper = {}
43
- for ch in s:
44
- mapper[ch] = mapper.get(ch, 0 ) + 1
45
- cnt = 0
46
- for _, v in mapper.items():
47
- if v % 2 != 0 :
48
- cnt += 1
49
- return cnt <= 1
41
+ counter = collections.Counter(s)
42
+ odd_cnt = sum (e % 2 for e in counter.values())
43
+ return odd_cnt < 2
50
44
```
51
45
52
46
### ** Java**
@@ -56,19 +50,47 @@ class Solution:
56
50
``` java
57
51
class Solution {
58
52
public boolean canPermutePalindrome (String s ) {
59
- Map<Character , Integer > map = new HashMap<> ();
60
- for (int i = 0 , n = s. length(); i < n; ++ i) {
61
- char ch = s. charAt(i);
62
- map. put(ch, map. getOrDefault(ch, 0 ) + 1 );
53
+ Map<Character , Integer > counter = new HashMap<> ();
54
+ for (char c : s. toCharArray()) {
55
+ counter. put(c, counter. getOrDefault(c, 0 ) + 1 );
63
56
}
64
- int cnt = 0 ;
65
- for (Map . Entry<Character , Integer > entry : map. entrySet()) {
66
- if (entry. getValue() % 2 != 0 ) {
67
- ++ cnt;
68
- }
57
+ int oddCnt = 0 ;
58
+ for (int e : counter. values()) {
59
+ oddCnt += e % 2 ;
69
60
}
70
- return cnt <= 1 ;
61
+ return oddCnt < 2 ;
62
+ }
63
+ }
64
+ ```
65
+
66
+ ### ** C++**
67
+
68
+ ``` cpp
69
+ class Solution {
70
+ public:
71
+ bool canPermutePalindrome(string s) {
72
+ unordered_map<char, int> counter;
73
+ for (char c : s) ++counter[ c] ;
74
+ int oddCnt = 0;
75
+ for (auto& it : counter) oddCnt += it.second % 2;
76
+ return oddCnt < 2;
77
+ }
78
+ };
79
+ ```
80
+
81
+ ### **Go**
82
+
83
+ ```go
84
+ func canPermutePalindrome(s string) bool {
85
+ counter := make(map[rune]int)
86
+ for _, c := range s {
87
+ counter[c]++
88
+ }
89
+ oddCnt := 0
90
+ for _, e := range counter {
91
+ oddCnt += e % 2
71
92
}
93
+ return oddCnt < 2
72
94
}
73
95
```
74
96
0 commit comments