Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 41 additions & 19 deletions
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‎

Lines changed: 41 additions & 19 deletions
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

Lines changed: 10 additions & 0 deletions
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+
};
Lines changed: 11 additions & 0 deletions
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+
}
Lines changed: 7 additions & 10 deletions
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
}
Lines changed: 3 additions & 8 deletions
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‎

Lines changed: 44 additions & 11 deletions
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‎

Lines changed: 44 additions & 11 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /