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 f0e2495

Browse files
authored
345 reverse vowels resolved. (#17)
* 345 reverse vowels resolved. * don't use underscore in package name * fix bug
1 parent 47caff4 commit f0e2495

File tree

5 files changed

+131
-5
lines changed

5 files changed

+131
-5
lines changed

‎README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ continually updating 😃.
3434
* [67. Add Binary](./src/0067_add_binary/add_binary.go)   *`brute force`*
3535
* [76. Minimum Window Substring](./src/0076_minimum_window_substring/minimum_window_substring.go)    *`sliding window`*
3636
* [125. Valid Palindrome](./src/0125_valid_palindrome/valid_palindrome.go)   *`string;`*  *`double index`*
37-
* [344. Reverse String](0344_reverse_string/reverse_string.go)   *`string;`*  *`double index`*
37+
* [344. Reverse String](./src/0344_reverse_string/reverse_string.go)   *`string;`*  *`double index`*
38+
* [345. Reverse Vowels of a String](./src/0345_reverse_vowels_of_a_string/reverse_vowels.go)   *`string;`*  *`double index`*
3839
* [438. Find All Anagrams in a String](./src/0438_all_anagrams_in_a_string/all_anagrams_in_a_string.go)   *`sliding window`*
3940

4041
### Linked List

‎src/0344_reverse_string/reverse_string.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func reverseString(s string) string {
1717
r = len(s) - 1
1818
)
1919

20-
for r >= l {
20+
for r > l {
2121
charL := s[l]
2222
charR := s[r]
2323
s = s[:r] + string(charL) + s[r+1:]
@@ -33,9 +33,9 @@ func reverseString(s string) string {
3333
// space complexity: O(n)
3434
func reverseString1(s string) string {
3535
sLen := len(s)
36-
runes := []rune(s)
36+
bytes := []byte(s)
3737
for i := 0; i < sLen/2; i++ {
38-
runes[i], runes[sLen-i-1] = runes[sLen-i-1], runes[i]
38+
bytes[i], bytes[sLen-i-1] = bytes[sLen-i-1], bytes[i]
3939
}
40-
return string(runes)
40+
return string(bytes)
4141
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
345. Reverse Vowels of a String
3+
https://leetcode.com/problems/reverse-vowels-of-a-string/
4+
5+
Write a function that takes a string as input and reverse only the vowels of a string.
6+
7+
*/
8+
// time: 2018年12月26日
9+
10+
package reversevowels
11+
12+
// time complexity: O(n)
13+
// space complexity: O(1)
14+
func reverseVowels(s string) string {
15+
var (
16+
l int
17+
r = len(s) - 1
18+
)
19+
20+
for r > l {
21+
for r >= 0 && !isVowel(s[r]) {
22+
r--
23+
}
24+
25+
for l < len(s) && !isVowel(s[l]) {
26+
l++
27+
}
28+
29+
if l >= r {
30+
break
31+
}
32+
charL := s[l]
33+
charR := s[r]
34+
s = s[:r] + string(charL) + s[r+1:]
35+
s = s[:l] + string(charR) + s[l+1:]
36+
r--
37+
l++
38+
}
39+
return s
40+
}
41+
42+
// time complexity: O(n)
43+
// space complexity: O(n)
44+
func reverseVowels1(s string) string {
45+
bytes := []byte(s)
46+
var (
47+
l int
48+
r = len(bytes) - 1
49+
)
50+
for r > l {
51+
for r >= 0 && !isVowel(s[r]) {
52+
r--
53+
}
54+
for l < len(bytes) && !isVowel(s[l]) {
55+
l++
56+
}
57+
if l >= r {
58+
break
59+
}
60+
61+
bytes[l], bytes[r] = bytes[r], bytes[l]
62+
l++
63+
r--
64+
}
65+
return string(bytes)
66+
}
67+
68+
func isVowel(char byte) bool {
69+
vowels := [...]byte{'a', 'o', 'e', 'i', 'u', 'A', 'O', 'E', 'I', 'U'}
70+
71+
for _, k := range vowels {
72+
if char == k {
73+
return true
74+
}
75+
}
76+
return false
77+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package reversevowels
2+
3+
import "testing"
4+
5+
func TestReverseVowels(t *testing.T) {
6+
testCases := []string{
7+
"hello",
8+
"leetcode",
9+
"aA",
10+
"a.b,.",
11+
}
12+
13+
expected := []string{
14+
"holle",
15+
"leotcede",
16+
"Aa",
17+
"a.b,.",
18+
}
19+
20+
for index, data := range testCases {
21+
if res := reverseVowels(data); res != expected[index] {
22+
t.Errorf("expected %s, got %s", expected[index], res)
23+
}
24+
}
25+
}
26+
27+
func TestReverseVowels1(t *testing.T) {
28+
testCases := []string{
29+
"hello",
30+
"leetcode",
31+
"aA",
32+
"a.b,.",
33+
}
34+
35+
expected := []string{
36+
"holle",
37+
"leotcede",
38+
"Aa",
39+
"a.b,.",
40+
}
41+
42+
for index, data := range testCases {
43+
if res := reverseVowels1(data); res != expected[index] {
44+
t.Errorf("expected %s, got %s", expected[index], res)
45+
}
46+
}
47+
}

‎src/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
|0300|[Longest Increasing Subsequence](./0300_longest_increasing_subsequence/lis.go)|Medium|*`dp`*|
4242
|0343|[Integer Break](./0343_integer_break/integer_break.go)|Medium|*`recursion;`* *`memory search;`* *`dynamic programming`*|
4343
|0344|[344. Reverse String](0344_reverse_string/reverse_string.go)|Easy|*`double index`*|
44+
|0345|[345. Reverse Vowels of a String](0345_reverse_vowels_of_a_string/reverse_vowels.go)|Easy|*`double index`*|
4445
|0349|[Intersection of Two Arrays](./0349_intersection_of_2_arrays/intersection_of_two_arrays.go)|Easy|*`set`*|
4546
|0350| [Intersection of Two Arrays II](./0350_intersection_of_two_arrays2/intersection_of_two_arrays2.go)|Easy|*`map`*|
4647
|0376|[Wiggle Subsequence](./0376_wiggle_subsequence/wiggle_subsequence.go)|Medium|*`dp`*|

0 commit comments

Comments
(0)

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