Skip to content

Commit f42c050

Browse files
committed
feat: add python and java solutions to leetcode problem: No.0345
No.0345. Reverse Vowels of a String, see https://leetcode-cn.com/problems/reverse-vowels-of-a-string
1 parent f69e6ba commit f42c050

File tree

6 files changed

+198
-4
lines changed

6 files changed

+198
-4
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@
5353
1. [数组中重复的数字](/lcof/面试题03.%20数组中重复的数字/README.md)
5454
1. [旋转数组](/solution/0100-0199/0189.Rotate%20Array/README.md)
5555

56+
### 字符串
57+
58+
1. [反转字符串中的元音字母](/solution/0300-0399/0345.Reverse%20Vowels%20of%20a%20String/README.md)
59+
5660
### 链表
5761

5862
1. [从尾到头打印链表](/lcof/面试题06.%20从尾到头打印链表/README.md)

README_EN.md

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
5252

5353
1. [Rotate Array](/solution/0100-0199/0189.Rotate%20Array/README_EN.md)
5454

55+
### Strings
56+
57+
1. [Reverse Vowels of a String](/solution/0300-0399/0345.Reverse%20Vowels%20of%20a%20String/README_EN.md)
58+
5559
### Linked List
5660

5761
1. [Delete Node in a Linked List](/solution/0200-0299/0237.Delete%20Node%20in%20a%20Linked%20List/README_EN.md)

solution/0300-0399/0345.Reverse Vowels of a String/README.md

+66-2
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,86 @@
2525

2626
<!-- 这里可写通用的实现逻辑 -->
2727

28+
将字符串转为字符数组(或列表),定义双指针 p、q,分别指向数组(列表)头部和尾部,当 p、q 指向的字符均为元音字母时,进行交换。
29+
30+
依次遍历,当 `p >= q` 时,遍历结束。将字符数组(列表)转为字符串返回即可。
31+
2832
<!-- tabs:start -->
2933

3034
### **Python3**
3135

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

3438
```python
35-
39+
class Solution:
40+
def reverseVowels(self, s: str) -> str:
41+
if s is None:
42+
return s
43+
chars = list(s)
44+
p, q = 0, len(chars) - 1
45+
while p < q:
46+
if chars[p] not in 'aeiouAEIOU':
47+
p += 1
48+
continue
49+
if chars[q] not in 'aeiouAEIOU':
50+
q -= 1
51+
continue
52+
chars[p], chars[q] = chars[q], chars[p]
53+
p += 1
54+
q -= 1
55+
return ''.join(chars)
3656
```
3757

3858
### **Java**
3959

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

4262
```java
43-
63+
class Solution {
64+
public String reverseVowels(String s) {
65+
if (s == null) {
66+
return s;
67+
}
68+
char[] chars = s.toCharArray();
69+
int p = 0, q = chars.length - 1;
70+
while (p < q) {
71+
if (!isVowel(chars[p])) {
72+
++p;
73+
continue;
74+
}
75+
if (!isVowel(chars[q])) {
76+
--q;
77+
continue;
78+
}
79+
swap(chars, p++, q--);
80+
}
81+
return String.valueOf(chars);
82+
}
83+
84+
private void swap(char[] chars, int i, int j) {
85+
char t = chars[i];
86+
chars[i] = chars[j];
87+
chars[j] = t;
88+
}
89+
90+
private boolean isVowel(char c) {
91+
switch(c) {
92+
case 'a':
93+
case 'e':
94+
case 'i':
95+
case 'o':
96+
case 'u':
97+
case 'A':
98+
case 'E':
99+
case 'I':
100+
case 'O':
101+
case 'U':
102+
return true;
103+
default:
104+
return false;
105+
}
106+
}
107+
}
44108
```
45109

46110
### **...**

solution/0300-0399/0345.Reverse Vowels of a String/README_EN.md

+62-2
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,73 @@ The vowels does not include the letter &quot;y&quot;.</p>
4141
### **Python3**
4242

4343
```python
44-
44+
class Solution:
45+
def reverseVowels(self, s: str) -> str:
46+
if s is None:
47+
return s
48+
chars = list(s)
49+
p, q = 0, len(chars) - 1
50+
while p < q:
51+
if chars[p] not in 'aeiouAEIOU':
52+
p += 1
53+
continue
54+
if chars[q] not in 'aeiouAEIOU':
55+
q -= 1
56+
continue
57+
chars[p], chars[q] = chars[q], chars[p]
58+
p += 1
59+
q -= 1
60+
return ''.join(chars)
4561
```
4662

4763
### **Java**
4864

4965
```java
50-
66+
class Solution {
67+
public String reverseVowels(String s) {
68+
if (s == null) {
69+
return s;
70+
}
71+
char[] chars = s.toCharArray();
72+
int p = 0, q = chars.length - 1;
73+
while (p < q) {
74+
if (!isVowel(chars[p])) {
75+
++p;
76+
continue;
77+
}
78+
if (!isVowel(chars[q])) {
79+
--q;
80+
continue;
81+
}
82+
swap(chars, p++, q--);
83+
}
84+
return String.valueOf(chars);
85+
}
86+
87+
private void swap(char[] chars, int i, int j) {
88+
char t = chars[i];
89+
chars[i] = chars[j];
90+
chars[j] = t;
91+
}
92+
93+
private boolean isVowel(char c) {
94+
switch(c) {
95+
case 'a':
96+
case 'e':
97+
case 'i':
98+
case 'o':
99+
case 'u':
100+
case 'A':
101+
case 'E':
102+
case 'I':
103+
case 'O':
104+
case 'U':
105+
return true;
106+
default:
107+
return false;
108+
}
109+
}
110+
}
51111
```
52112

53113
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution {
2+
public String reverseVowels(String s) {
3+
if (s == null) {
4+
return s;
5+
}
6+
char[] chars = s.toCharArray();
7+
int p = 0, q = chars.length - 1;
8+
while (p < q) {
9+
if (!isVowel(chars[p])) {
10+
++p;
11+
continue;
12+
}
13+
if (!isVowel(chars[q])) {
14+
--q;
15+
continue;
16+
}
17+
swap(chars, p++, q--);
18+
}
19+
return String.valueOf(chars);
20+
}
21+
22+
private void swap(char[] chars, int i, int j) {
23+
char t = chars[i];
24+
chars[i] = chars[j];
25+
chars[j] = t;
26+
}
27+
28+
private boolean isVowel(char c) {
29+
switch(c) {
30+
case 'a':
31+
case 'e':
32+
case 'i':
33+
case 'o':
34+
case 'u':
35+
case 'A':
36+
case 'E':
37+
case 'I':
38+
case 'O':
39+
case 'U':
40+
return true;
41+
default:
42+
return false;
43+
}
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def reverseVowels(self, s: str) -> str:
3+
if s is None:
4+
return s
5+
chars = list(s)
6+
p, q = 0, len(chars) - 1
7+
while p < q:
8+
if chars[p] not in 'aeiouAEIOU':
9+
p += 1
10+
continue
11+
if chars[q] not in 'aeiouAEIOU':
12+
q -= 1
13+
continue
14+
chars[p], chars[q] = chars[q], chars[p]
15+
p += 1
16+
q -= 1
17+
return ''.join(chars)

0 commit comments

Comments
 (0)