Skip to content

Commit 48c2372

Browse files
committed
feat: add solutions to lc problems: No.0266,0409
No.0266.Palindrome Permutation No.0409.Longest Palindrome
1 parent 56babea commit 48c2372

File tree

12 files changed

+235
-89
lines changed

12 files changed

+235
-89
lines changed

solution/0200-0299/0266.Palindrome Permutation/README.md

+41-19
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
<pre><strong>输入:</strong> <code>&quot;carerac&quot;</code>
2424
<strong>输出:</strong> true</pre>
2525

26-
2726
## 解法
2827

2928
<!-- 这里可写通用的实现逻辑 -->
@@ -39,14 +38,9 @@
3938
```python
4039
class Solution:
4140
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
5044
```
5145

5246
### **Java**
@@ -56,19 +50,47 @@ class Solution:
5650
```java
5751
class Solution {
5852
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);
6356
}
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;
6960
}
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
7192
}
93+
return oddCnt < 2
7294
}
7395
```
7496

solution/0200-0299/0266.Palindrome Permutation/README_EN.md

+41-19
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
<li><code>s</code> consists of only lowercase English letters.</li>
3737
</ul>
3838

39-
4039
## Solutions
4140

4241
<!-- tabs:start -->
@@ -46,34 +45,57 @@
4645
```python
4746
class Solution:
4847
def canPermutePalindrome(self, s: str) -> bool:
49-
mapper = {}
50-
for ch in s:
51-
mapper[ch] = mapper.get(ch, 0) + 1
52-
cnt = 0
53-
for _, v in mapper.items():
54-
if v % 2 != 0:
55-
cnt += 1
56-
return cnt <= 1
48+
counter = collections.Counter(s)
49+
odd_cnt = sum(e % 2 for e in counter.values())
50+
return odd_cnt < 2
5751
```
5852

5953
### **Java**
6054

6155
```java
6256
class Solution {
6357
public boolean canPermutePalindrome(String s) {
64-
Map<Character, Integer> map = new HashMap<>();
65-
for (int i = 0, n = s.length(); i < n; ++i) {
66-
char ch = s.charAt(i);
67-
map.put(ch, map.getOrDefault(ch, 0) + 1);
58+
Map<Character, Integer> counter = new HashMap<>();
59+
for (char c : s.toCharArray()) {
60+
counter.put(c, counter.getOrDefault(c, 0) + 1);
6861
}
69-
int cnt = 0;
70-
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
71-
if (entry.getValue() % 2 != 0) {
72-
++cnt;
73-
}
62+
int oddCnt = 0;
63+
for (int e : counter.values()) {
64+
oddCnt += e % 2;
7465
}
75-
return cnt <= 1;
66+
return oddCnt < 2;
67+
}
68+
}
69+
```
70+
71+
### **C++**
72+
73+
```cpp
74+
class Solution {
75+
public:
76+
bool canPermutePalindrome(string s) {
77+
unordered_map<char, int> counter;
78+
for (char c : s) ++counter[c];
79+
int oddCnt = 0;
80+
for (auto& it : counter) oddCnt += it.second % 2;
81+
return oddCnt < 2;
82+
}
83+
};
84+
```
85+
86+
### **Go**
87+
88+
```go
89+
func canPermutePalindrome(s string) bool {
90+
counter := make(map[rune]int)
91+
for _, c := range s {
92+
counter[c]++
93+
}
94+
oddCnt := 0
95+
for _, e := range counter {
96+
oddCnt += e % 2
7697
}
98+
return oddCnt < 2
7799
}
78100
```
79101

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
public:
3+
bool canPermutePalindrome(string s) {
4+
unordered_map<char, int> counter;
5+
for (char c : s) ++counter[c];
6+
int oddCnt = 0;
7+
for (auto& it : counter) oddCnt += it.second % 2;
8+
return oddCnt < 2;
9+
}
10+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func canPermutePalindrome(s string) bool {
2+
counter := make(map[rune]int)
3+
for _, c := range s {
4+
counter[c]++
5+
}
6+
oddCnt := 0
7+
for _, e := range counter {
8+
oddCnt += e % 2
9+
}
10+
return oddCnt < 2
11+
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
class Solution {
22
public boolean canPermutePalindrome(String s) {
3-
Map<Character, Integer> map = new HashMap<>();
4-
for (int i = 0, n = s.length(); i < n; ++i) {
5-
char ch = s.charAt(i);
6-
map.put(ch, map.getOrDefault(ch, 0) + 1);
3+
Map<Character, Integer> counter = new HashMap<>();
4+
for (char c : s.toCharArray()) {
5+
counter.put(c, counter.getOrDefault(c, 0) + 1);
76
}
8-
int cnt = 0;
9-
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
10-
if (entry.getValue() % 2 != 0) {
11-
++cnt;
12-
}
7+
int oddCnt = 0;
8+
for (int e : counter.values()) {
9+
oddCnt += e % 2;
1310
}
14-
return cnt <= 1;
11+
return oddCnt < 2;
1512
}
1613
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
class Solution:
22
def canPermutePalindrome(self, s: str) -> bool:
3-
mapper = {}
4-
for ch in s:
5-
mapper[ch] = mapper.get(ch, 0) + 1
6-
cnt = 0
7-
for _, v in mapper.items():
8-
if v % 2 != 0:
9-
cnt += 1
10-
return cnt <= 1
3+
counter = collections.Counter(s)
4+
odd_cnt = sum(e % 2 for e in counter.values())
5+
return odd_cnt < 2

solution/0400-0499/0409.Longest Palindrome/README.md

+44-11
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,9 @@
4040
```python
4141
class Solution:
4242
def longestPalindrome(self, s: str) -> int:
43-
res = [0] * 128
44-
for ch in s:
45-
res[ord(ch)] += 1
46-
odd_cnt, n = 0, len(s)
47-
for e in res:
48-
odd_cnt += (e % 2)
43+
n = len(s)
44+
counter = collections.Counter(s)
45+
odd_cnt = sum(e % 2 for e in counter.values())
4946
return n if odd_cnt == 0 else n - odd_cnt + 1
5047
```
5148

@@ -56,15 +53,15 @@ class Solution:
5653
```java
5754
class Solution {
5855
public int longestPalindrome(String s) {
59-
int[] res = new int[128];
60-
int n = s.length();
61-
for (int i = 0; i < n; ++i) {
62-
res[s.charAt(i)]++;
56+
int[] counter = new int[128];
57+
for (char c : s.toCharArray()) {
58+
++counter[c];
6359
}
6460
int oddCnt = 0;
65-
for (int e : res) {
61+
for (int e : counter) {
6662
oddCnt += (e % 2);
6763
}
64+
int n = s.length();
6865
return oddCnt == 0 ? n : n - oddCnt + 1;
6966
}
7067
}
@@ -88,6 +85,42 @@ function longestPalindrome(s: string): number {
8885
};
8986
```
9087

88+
### **C++**
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
int longestPalindrome(string s) {
94+
vector<int> counter(128);
95+
for (char c : s) ++counter[c];
96+
int oddCnt = 0;
97+
for (int e : counter) oddCnt += e % 2;
98+
int n = s.size();
99+
return oddCnt == 0 ? n : n - oddCnt + 1;
100+
}
101+
};
102+
```
103+
104+
### **Go**
105+
106+
```go
107+
func longestPalindrome(s string) int {
108+
counter := make([]int, 128)
109+
for _, c := range s {
110+
counter[c]++
111+
}
112+
oddCnt := 0
113+
for _, e := range counter {
114+
oddCnt += e % 2
115+
}
116+
n := len(s)
117+
if oddCnt == 0 {
118+
return n
119+
}
120+
return n - oddCnt + 1
121+
}
122+
```
123+
91124
### **...**
92125

93126
```

solution/0400-0499/0409.Longest Palindrome/README_EN.md

+44-11
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,9 @@ One longest palindrome that can be built is &quot;dccaccd&quot;, whose length is
5050
```python
5151
class Solution:
5252
def longestPalindrome(self, s: str) -> int:
53-
res = [0] * 128
54-
for ch in s:
55-
res[ord(ch)] += 1
56-
odd_cnt, n = 0, len(s)
57-
for e in res:
58-
odd_cnt += (e % 2)
53+
n = len(s)
54+
counter = collections.Counter(s)
55+
odd_cnt = sum(e % 2 for e in counter.values())
5956
return n if odd_cnt == 0 else n - odd_cnt + 1
6057
```
6158

@@ -64,15 +61,15 @@ class Solution:
6461
```java
6562
class Solution {
6663
public int longestPalindrome(String s) {
67-
int[] res = new int[128];
68-
int n = s.length();
69-
for (int i = 0; i < n; ++i) {
70-
res[s.charAt(i)]++;
64+
int[] counter = new int[128];
65+
for (char c : s.toCharArray()) {
66+
++counter[c];
7167
}
7268
int oddCnt = 0;
73-
for (int e : res) {
69+
for (int e : counter) {
7470
oddCnt += (e % 2);
7571
}
72+
int n = s.length();
7673
return oddCnt == 0 ? n : n - oddCnt + 1;
7774
}
7875
}
@@ -96,6 +93,42 @@ function longestPalindrome(s: string): number {
9693
};
9794
```
9895

96+
### **C++**
97+
98+
```cpp
99+
class Solution {
100+
public:
101+
int longestPalindrome(string s) {
102+
vector<int> counter(128);
103+
for (char c : s) ++counter[c];
104+
int oddCnt = 0;
105+
for (int e : counter) oddCnt += e % 2;
106+
int n = s.size();
107+
return oddCnt == 0 ? n : n - oddCnt + 1;
108+
}
109+
};
110+
```
111+
112+
### **Go**
113+
114+
```go
115+
func longestPalindrome(s string) int {
116+
counter := make([]int, 128)
117+
for _, c := range s {
118+
counter[c]++
119+
}
120+
oddCnt := 0
121+
for _, e := range counter {
122+
oddCnt += e % 2
123+
}
124+
n := len(s)
125+
if oddCnt == 0 {
126+
return n
127+
}
128+
return n - oddCnt + 1
129+
}
130+
```
131+
99132
### **...**
100133

101134
```

0 commit comments

Comments
 (0)