Skip to content

Commit 36a5d30

Browse files
authored
feat: add solutions to lc problem: No.1328 (doocs#1278)
No.1328.Break a Palindrome
1 parent f8246f3 commit 36a5d30

File tree

7 files changed

+294
-2
lines changed

7 files changed

+294
-2
lines changed

solution/1300-1399/1328.Break a Palindrome/README.md

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,22 +41,129 @@
4141

4242
<!-- 这里可写通用的实现逻辑 -->
4343

44+
**方法一:贪心**
45+
46+
我们先判断字符串的长度是否为 $1$,若是则直接返回空串。
47+
48+
否则,我们从左到右遍历字符串的前半部分,找到第一个不为 `'a'` 的字符,将其改为 `'a'` 即可。如果不存在这样的字符,那么我们将最后一个字符改为 `'b'` 即可。
49+
50+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串的长度。
51+
4452
<!-- tabs:start -->
4553

4654
### **Python3**
4755

4856
<!-- 这里可写当前语言的特殊实现逻辑 -->
4957

5058
```python
51-
59+
class Solution:
60+
def breakPalindrome(self, palindrome: str) -> str:
61+
n = len(palindrome)
62+
if n == 1:
63+
return ""
64+
s = list(palindrome)
65+
i = 0
66+
while i < n // 2 and s[i] == "a":
67+
i += 1
68+
if i == n // 2:
69+
s[-1] = "b"
70+
else:
71+
s[i] = "a"
72+
return "".join(s)
5273
```
5374

5475
### **Java**
5576

5677
<!-- 这里可写当前语言的特殊实现逻辑 -->
5778

5879
```java
80+
class Solution {
81+
public String breakPalindrome(String palindrome) {
82+
int n = palindrome.length();
83+
if (n == 1) {
84+
return "";
85+
}
86+
char[] cs = palindrome.toCharArray();
87+
int i = 0;
88+
while (i < n / 2 && cs[i] == 'a') {
89+
++i;
90+
}
91+
if (i == n / 2) {
92+
cs[n - 1] = 'b';
93+
} else {
94+
cs[i] = 'a';
95+
}
96+
return String.valueOf(cs);
97+
}
98+
}
99+
```
100+
101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
string breakPalindrome(string palindrome) {
107+
int n = palindrome.size();
108+
if (n == 1) {
109+
return "";
110+
}
111+
int i = 0;
112+
while (i < n / 2 && palindrome[i] == 'a') {
113+
++i;
114+
}
115+
if (i == n / 2) {
116+
palindrome[n - 1] = 'b';
117+
} else {
118+
palindrome[i] = 'a';
119+
}
120+
return palindrome;
121+
}
122+
};
123+
```
124+
125+
### **Go**
126+
127+
```go
128+
func breakPalindrome(palindrome string) string {
129+
n := len(palindrome)
130+
if n == 1 {
131+
return ""
132+
}
133+
i := 0
134+
s := []byte(palindrome)
135+
for i < n/2 && s[i] == 'a' {
136+
i++
137+
}
138+
if i == n/2 {
139+
s[n-1] = 'b'
140+
} else {
141+
s[i] = 'a'
142+
}
143+
return string(s)
144+
}
145+
```
59146

147+
### **TypeScript**
148+
149+
```ts
150+
function breakPalindrome(palindrome: string): string {
151+
const n = palindrome.length;
152+
if (n === 1) {
153+
return '';
154+
}
155+
const s = palindrome.split('');
156+
let i = 0;
157+
while (i < n >> 1 && s[i] === 'a') {
158+
i++;
159+
}
160+
if (i == n >> 1) {
161+
s[n - 1] = 'b';
162+
} else {
163+
s[i] = 'a';
164+
}
165+
return s.join('');
166+
}
60167
```
61168

62169
### **...**

solution/1300-1399/1328.Break a Palindrome/README_EN.md

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,112 @@ Of all the ways, &quot;aaccba&quot; is the lexicographically smallest.
4343
### **Python3**
4444

4545
```python
46-
46+
class Solution:
47+
def breakPalindrome(self, palindrome: str) -> str:
48+
n = len(palindrome)
49+
if n == 1:
50+
return ""
51+
s = list(palindrome)
52+
i = 0
53+
while i < n // 2 and s[i] == "a":
54+
i += 1
55+
if i == n // 2:
56+
s[-1] = "b"
57+
else:
58+
s[i] = "a"
59+
return "".join(s)
4760
```
4861

4962
### **Java**
5063

5164
```java
65+
class Solution {
66+
public String breakPalindrome(String palindrome) {
67+
int n = palindrome.length();
68+
if (n == 1) {
69+
return "";
70+
}
71+
char[] cs = palindrome.toCharArray();
72+
int i = 0;
73+
while (i < n / 2 && cs[i] == 'a') {
74+
++i;
75+
}
76+
if (i == n / 2) {
77+
cs[n - 1] = 'b';
78+
} else {
79+
cs[i] = 'a';
80+
}
81+
return String.valueOf(cs);
82+
}
83+
}
84+
```
85+
86+
### **C++**
87+
88+
```cpp
89+
class Solution {
90+
public:
91+
string breakPalindrome(string palindrome) {
92+
int n = palindrome.size();
93+
if (n == 1) {
94+
return "";
95+
}
96+
int i = 0;
97+
while (i < n / 2 && palindrome[i] == 'a') {
98+
++i;
99+
}
100+
if (i == n / 2) {
101+
palindrome[n - 1] = 'b';
102+
} else {
103+
palindrome[i] = 'a';
104+
}
105+
return palindrome;
106+
}
107+
};
108+
```
109+
110+
### **Go**
111+
112+
```go
113+
func breakPalindrome(palindrome string) string {
114+
n := len(palindrome)
115+
if n == 1 {
116+
return ""
117+
}
118+
i := 0
119+
s := []byte(palindrome)
120+
for i < n/2 && s[i] == 'a' {
121+
i++
122+
}
123+
if i == n/2 {
124+
s[n-1] = 'b'
125+
} else {
126+
s[i] = 'a'
127+
}
128+
return string(s)
129+
}
130+
```
52131

132+
### **TypeScript**
133+
134+
```ts
135+
function breakPalindrome(palindrome: string): string {
136+
const n = palindrome.length;
137+
if (n === 1) {
138+
return '';
139+
}
140+
const s = palindrome.split('');
141+
let i = 0;
142+
while (i < n >> 1 && s[i] === 'a') {
143+
i++;
144+
}
145+
if (i == n >> 1) {
146+
s[n - 1] = 'b';
147+
} else {
148+
s[i] = 'a';
149+
}
150+
return s.join('');
151+
}
53152
```
54153

55154
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
string breakPalindrome(string palindrome) {
4+
int n = palindrome.size();
5+
if (n == 1) {
6+
return "";
7+
}
8+
int i = 0;
9+
while (i < n / 2 && palindrome[i] == 'a') {
10+
++i;
11+
}
12+
if (i == n / 2) {
13+
palindrome[n - 1] = 'b';
14+
} else {
15+
palindrome[i] = 'a';
16+
}
17+
return palindrome;
18+
}
19+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
func breakPalindrome(palindrome string) string {
2+
n := len(palindrome)
3+
if n == 1 {
4+
return ""
5+
}
6+
i := 0
7+
s := []byte(palindrome)
8+
for i < n/2 && s[i] == 'a' {
9+
i++
10+
}
11+
if i == n/2 {
12+
s[n-1] = 'b'
13+
} else {
14+
s[i] = 'a'
15+
}
16+
return string(s)
17+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public String breakPalindrome(String palindrome) {
3+
int n = palindrome.length();
4+
if (n == 1) {
5+
return "";
6+
}
7+
char[] cs = palindrome.toCharArray();
8+
int i = 0;
9+
while (i < n / 2 && cs[i] == 'a') {
10+
++i;
11+
}
12+
if (i == n / 2) {
13+
cs[n - 1] = 'b';
14+
} else {
15+
cs[i] = 'a';
16+
}
17+
return String.valueOf(cs);
18+
}
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def breakPalindrome(self, palindrome: str) -> str:
3+
n = len(palindrome)
4+
if n == 1:
5+
return ""
6+
s = list(palindrome)
7+
i = 0
8+
while i < n // 2 and s[i] == "a":
9+
i += 1
10+
if i == n // 2:
11+
s[-1] = "b"
12+
else:
13+
s[i] = "a"
14+
return "".join(s)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function breakPalindrome(palindrome: string): string {
2+
const n = palindrome.length;
3+
if (n === 1) {
4+
return '';
5+
}
6+
const s = palindrome.split('');
7+
let i = 0;
8+
while (i < n >> 1 && s[i] === 'a') {
9+
i++;
10+
}
11+
if (i == n >> 1) {
12+
s[n - 1] = 'b';
13+
} else {
14+
s[i] = 'a';
15+
}
16+
return s.join('');
17+
}

0 commit comments

Comments
 (0)