Skip to content

Commit ce1beb1

Browse files
committed
feat: add solutions to lc problem: No.1839
No.1839.Longest Substring Of All Vowels in Order
1 parent a037900 commit ce1beb1

File tree

6 files changed

+341
-2
lines changed

6 files changed

+341
-2
lines changed

solution/1800-1899/1839.Longest Substring Of All Vowels in Order/README.md

Lines changed: 122 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,143 @@
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60+
**方法一:双指针 + 模拟**
61+
62+
我们可以先将字符串 `word` 做个转化,比如对于 `word="aaaeiouu"`,我们可以将其转化为数据项 `('a', 3)`, `('e', 1)`, `('i', 1)`, `('o', 1)`, `('u', 2)`,存放在数组 `arr` 中。其中每个数据项的第一个元素表示元音字母,第二个元素表示该元音字母连续出现的次数。这部分转化可以通过双指针来实现。
63+
64+
接下来,我们遍历数组 `arr`,每次取相邻的 $5$ 个数据项,判断这些数据项中的元音字母是否分别为 `'a'`, `'e'`, `'i'`, `'o'`, `'u'`,如果是,则计算这 $5$ 个数据项中元音字母的总次数,即为当前的美丽子字符串的长度,更新答案的最大值即可。
65+
66+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 `word` 的长度。
67+
6068
<!-- tabs:start -->
6169

6270
### **Python3**
6371

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

6674
```python
67-
75+
class Solution:
76+
def longestBeautifulSubstring(self, word: str) -> int:
77+
arr = []
78+
n = len(word)
79+
i = 0
80+
while i < n:
81+
j = i
82+
while j < n and word[j] == word[i]:
83+
j += 1
84+
arr.append((word[i], j - i))
85+
i = j
86+
ans = 0
87+
for i in range(len(arr) - 4):
88+
a, b, c, d, e = arr[i : i + 5]
89+
if a[0] + b[0] + c[0] + d[0] + e[0] == "aeiou":
90+
ans = max(ans, a[1] + b[1] + c[1] + d[1] + e[1])
91+
return ans
6892
```
6993

7094
### **Java**
7195

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

7498
```java
99+
class Solution {
100+
public int longestBeautifulSubstring(String word) {
101+
int n = word.length();
102+
List<Node> arr = new ArrayList<>();
103+
for (int i = 0; i < n;) {
104+
int j = i;
105+
while (j < n && word.charAt(j) == word.charAt(i)) {
106+
++j;
107+
}
108+
arr.add(new Node(word.charAt(i), j - i));
109+
i = j;
110+
}
111+
int ans = 0;
112+
for (int i = 0; i < arr.size() - 4; ++i) {
113+
Node a = arr.get(i), b = arr.get(i + 1), c = arr.get(i + 2), d = arr.get(i + 3), e = arr.get(i + 4);
114+
if (a.c == 'a' && b.c == 'e' && c.c == 'i' && d.c == 'o' && e.c == 'u') {
115+
ans = Math.max(ans, a.v + b.v + c.v + d.v + e.v);
116+
}
117+
}
118+
return ans;
119+
}
120+
}
121+
122+
class Node {
123+
char c;
124+
int v;
125+
126+
Node(char c, int v) {
127+
this.c = c;
128+
this.v = v;
129+
}
130+
}
131+
```
132+
133+
### **C++**
134+
135+
```cpp
136+
class Solution {
137+
public:
138+
int longestBeautifulSubstring(string word) {
139+
vector<pair<char, int>> arr;
140+
int n = word.size();
141+
for (int i = 0; i < n;) {
142+
int j = i;
143+
while (j < n && word[j] == word[i]) ++j;
144+
arr.push_back({word[i], j - i});
145+
i = j;
146+
}
147+
int ans = 0;
148+
for (int i = 0; i < (int) arr.size() - 4; ++i) {
149+
auto& [a, v1] = arr[i];
150+
auto& [b, v2] = arr[i + 1];
151+
auto& [c, v3] = arr[i + 2];
152+
auto& [d, v4] = arr[i + 3];
153+
auto& [e, v5] = arr[i + 4];
154+
if (a == 'a' && b == 'e' && c == 'i' && d == 'o' && e == 'u') {
155+
ans = max(ans, v1 + v2 + v3 + v4 + v5);
156+
}
157+
}
158+
return ans;
159+
}
160+
};
161+
```
75162
163+
### **Go**
164+
165+
```go
166+
func longestBeautifulSubstring(word string) (ans int) {
167+
arr := []pair{}
168+
n := len(word)
169+
for i := 0; i < n; {
170+
j := i
171+
for j < n && word[j] == word[i] {
172+
j++
173+
}
174+
arr = append(arr, pair{word[i], j - i})
175+
i = j
176+
}
177+
for i := 0; i < len(arr)-4; i++ {
178+
a, b, c, d, e := arr[i], arr[i+1], arr[i+2], arr[i+3], arr[i+4]
179+
if a.c == 'a' && b.c == 'e' && c.c == 'i' && d.c == 'o' && e.c == 'u' {
180+
ans = max(ans, a.v+b.v+c.v+d.v+e.v)
181+
}
182+
}
183+
return
184+
}
185+
186+
type pair struct {
187+
c byte
188+
v int
189+
}
190+
191+
func max(a, b int) int {
192+
if a > b {
193+
return a
194+
}
195+
return b
196+
}
76197
```
77198

78199
### **...**

solution/1800-1899/1839.Longest Substring Of All Vowels in Order/README_EN.md

Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,126 @@
5656
### **Python3**
5757

5858
```python
59-
59+
class Solution:
60+
def longestBeautifulSubstring(self, word: str) -> int:
61+
arr = []
62+
n = len(word)
63+
i = 0
64+
while i < n:
65+
j = i
66+
while j < n and word[j] == word[i]:
67+
j += 1
68+
arr.append((word[i], j - i))
69+
i = j
70+
ans = 0
71+
for i in range(len(arr) - 4):
72+
a, b, c, d, e = arr[i : i + 5]
73+
if a[0] + b[0] + c[0] + d[0] + e[0] == "aeiou":
74+
ans = max(ans, a[1] + b[1] + c[1] + d[1] + e[1])
75+
return ans
6076
```
6177

6278
### **Java**
6379

6480
```java
81+
class Solution {
82+
public int longestBeautifulSubstring(String word) {
83+
int n = word.length();
84+
List<Node> arr = new ArrayList<>();
85+
for (int i = 0; i < n;) {
86+
int j = i;
87+
while (j < n && word.charAt(j) == word.charAt(i)) {
88+
++j;
89+
}
90+
arr.add(new Node(word.charAt(i), j - i));
91+
i = j;
92+
}
93+
int ans = 0;
94+
for (int i = 0; i < arr.size() - 4; ++i) {
95+
Node a = arr.get(i), b = arr.get(i + 1), c = arr.get(i + 2), d = arr.get(i + 3), e = arr.get(i + 4);
96+
if (a.c == 'a' && b.c == 'e' && c.c == 'i' && d.c == 'o' && e.c == 'u') {
97+
ans = Math.max(ans, a.v + b.v + c.v + d.v + e.v);
98+
}
99+
}
100+
return ans;
101+
}
102+
}
103+
104+
class Node {
105+
char c;
106+
int v;
107+
108+
Node(char c, int v) {
109+
this.c = c;
110+
this.v = v;
111+
}
112+
}
113+
```
114+
115+
### **C++**
116+
117+
```cpp
118+
class Solution {
119+
public:
120+
int longestBeautifulSubstring(string word) {
121+
vector<pair<char, int>> arr;
122+
int n = word.size();
123+
for (int i = 0; i < n;) {
124+
int j = i;
125+
while (j < n && word[j] == word[i]) ++j;
126+
arr.push_back({word[i], j - i});
127+
i = j;
128+
}
129+
int ans = 0;
130+
for (int i = 0; i < (int) arr.size() - 4; ++i) {
131+
auto& [a, v1] = arr[i];
132+
auto& [b, v2] = arr[i + 1];
133+
auto& [c, v3] = arr[i + 2];
134+
auto& [d, v4] = arr[i + 3];
135+
auto& [e, v5] = arr[i + 4];
136+
if (a == 'a' && b == 'e' && c == 'i' && d == 'o' && e == 'u') {
137+
ans = max(ans, v1 + v2 + v3 + v4 + v5);
138+
}
139+
}
140+
return ans;
141+
}
142+
};
143+
```
65144
145+
### **Go**
146+
147+
```go
148+
func longestBeautifulSubstring(word string) (ans int) {
149+
arr := []pair{}
150+
n := len(word)
151+
for i := 0; i < n; {
152+
j := i
153+
for j < n && word[j] == word[i] {
154+
j++
155+
}
156+
arr = append(arr, pair{word[i], j - i})
157+
i = j
158+
}
159+
for i := 0; i < len(arr)-4; i++ {
160+
a, b, c, d, e := arr[i], arr[i+1], arr[i+2], arr[i+3], arr[i+4]
161+
if a.c == 'a' && b.c == 'e' && c.c == 'i' && d.c == 'o' && e.c == 'u' {
162+
ans = max(ans, a.v+b.v+c.v+d.v+e.v)
163+
}
164+
}
165+
return
166+
}
167+
168+
type pair struct {
169+
c byte
170+
v int
171+
}
172+
173+
func max(a, b int) int {
174+
if a > b {
175+
return a
176+
}
177+
return b
178+
}
66179
```
67180

68181
### **...**
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int longestBeautifulSubstring(string word) {
4+
vector<pair<char, int>> arr;
5+
int n = word.size();
6+
for (int i = 0; i < n;) {
7+
int j = i;
8+
while (j < n && word[j] == word[i]) ++j;
9+
arr.push_back({word[i], j - i});
10+
i = j;
11+
}
12+
int ans = 0;
13+
for (int i = 0; i < (int) arr.size() - 4; ++i) {
14+
auto& [a, v1] = arr[i];
15+
auto& [b, v2] = arr[i + 1];
16+
auto& [c, v3] = arr[i + 2];
17+
auto& [d, v4] = arr[i + 3];
18+
auto& [e, v5] = arr[i + 4];
19+
if (a == 'a' && b == 'e' && c == 'i' && d == 'o' && e == 'u') {
20+
ans = max(ans, v1 + v2 + v3 + v4 + v5);
21+
}
22+
}
23+
return ans;
24+
}
25+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
func longestBeautifulSubstring(word string) (ans int) {
2+
arr := []pair{}
3+
n := len(word)
4+
for i := 0; i < n; {
5+
j := i
6+
for j < n && word[j] == word[i] {
7+
j++
8+
}
9+
arr = append(arr, pair{word[i], j - i})
10+
i = j
11+
}
12+
for i := 0; i < len(arr)-4; i++ {
13+
a, b, c, d, e := arr[i], arr[i+1], arr[i+2], arr[i+3], arr[i+4]
14+
if a.c == 'a' && b.c == 'e' && c.c == 'i' && d.c == 'o' && e.c == 'u' {
15+
ans = max(ans, a.v+b.v+c.v+d.v+e.v)
16+
}
17+
}
18+
return
19+
}
20+
21+
type pair struct {
22+
c byte
23+
v int
24+
}
25+
26+
func max(a, b int) int {
27+
if a > b {
28+
return a
29+
}
30+
return b
31+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
public int longestBeautifulSubstring(String word) {
3+
int n = word.length();
4+
List<Node> arr = new ArrayList<>();
5+
for (int i = 0; i < n;) {
6+
int j = i;
7+
while (j < n && word.charAt(j) == word.charAt(i)) {
8+
++j;
9+
}
10+
arr.add(new Node(word.charAt(i), j - i));
11+
i = j;
12+
}
13+
int ans = 0;
14+
for (int i = 0; i < arr.size() - 4; ++i) {
15+
Node a = arr.get(i), b = arr.get(i + 1), c = arr.get(i + 2), d = arr.get(i + 3), e = arr.get(i + 4);
16+
if (a.c == 'a' && b.c == 'e' && c.c == 'i' && d.c == 'o' && e.c == 'u') {
17+
ans = Math.max(ans, a.v + b.v + c.v + d.v + e.v);
18+
}
19+
}
20+
return ans;
21+
}
22+
}
23+
24+
class Node {
25+
char c;
26+
int v;
27+
28+
Node(char c, int v) {
29+
this.c = c;
30+
this.v = v;
31+
}
32+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def longestBeautifulSubstring(self, word: str) -> int:
3+
arr = []
4+
n = len(word)
5+
i = 0
6+
while i < n:
7+
j = i
8+
while j < n and word[j] == word[i]:
9+
j += 1
10+
arr.append((word[i], j - i))
11+
i = j
12+
ans = 0
13+
for i in range(len(arr) - 4):
14+
a, b, c, d, e = arr[i : i + 5]
15+
if a[0] + b[0] + c[0] + d[0] + e[0] == "aeiou":
16+
ans = max(ans, a[1] + b[1] + c[1] + d[1] + e[1])
17+
return ans

0 commit comments

Comments
 (0)