-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2390-RemovingStarsFromAString.go
More file actions
65 lines (57 loc) · 2.23 KB
/
2390-RemovingStarsFromAString.go
File metadata and controls
65 lines (57 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package main
// 2390. Removing Stars From a String
// You are given a string s, which contains stars *.
// In one operation, you can:
// Choose a star in s.
// Remove the closest non-star character to its left, as well as remove the star itself.
// Return the string after all stars have been removed.
// Note:
// The input will be generated such that the operation is always possible.
// It can be shown that the resulting string will always be unique.
// Example 1:
// Input: s = "leet**cod*e"
// Output: "lecoe"
// Explanation: Performing the removals from left to right:
// - The closest character to the 1st star is 't' in "leet**cod*e". s becomes "lee*cod*e".
// - The closest character to the 2nd star is 'e' in "lee*cod*e". s becomes "lecod*e".
// - The closest character to the 3rd star is 'd' in "lecod*e". s becomes "lecoe".
// There are no more stars, so we return "lecoe".
// Example 2:
// Input: s = "erase*****"
// Output: ""
// Explanation: The entire string is removed, so we return an empty string.
// Constraints:
// 1 <= s.length <= 10^5
// s consists of lowercase English letters and stars *.
// The operation above can be performed on s.
import "fmt"
// stack
func removeStars(s string) string {
res := []byte{}
for i := 0; i < len(s); i++ {
if s[i] == '*' { // 遇见 * pop出一个字符
if len(res) > 0 {
res = res[:len(res) - 1]
}
} else {
res = append(res, s[i]) // 入栈
}
}
return string(res)
}
func main() {
// Example 1:
// Input: s = "leet**cod*e"
// Output: "lecoe"
// Explanation: Performing the removals from left to right:
// - The closest character to the 1st star is 't' in "leet**cod*e". s becomes "lee*cod*e".
// - The closest character to the 2nd star is 'e' in "lee*cod*e". s becomes "lecod*e".
// - The closest character to the 3rd star is 'd' in "lecod*e". s becomes "lecoe".
// There are no more stars, so we return "lecoe".
fmt.Println(removeStars("leet**cod*e")) // lecoe
// Example 2:
// Input: s = "erase*****"
// Output: ""
// Explanation: The entire string is removed, so we return an empty string.
fmt.Println(removeStars("erase*****")) // ""
}