mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-04 16:12:47 +08:00
49 lines
930 B
Go
49 lines
930 B
Go
package leetcode
|
|
|
|
// 解法一 stack
|
|
func removeDuplicates(s string, k int) string {
|
|
stack, arr := [][2]int{}, []byte{}
|
|
for _, c := range s {
|
|
i := int(c - 'a')
|
|
if len(stack) > 0 && stack[len(stack)-1][0] == i {
|
|
stack[len(stack)-1][1]++
|
|
if stack[len(stack)-1][1] == k {
|
|
stack = stack[:len(stack)-1]
|
|
}
|
|
} else {
|
|
stack = append(stack, [2]int{i, 1})
|
|
}
|
|
}
|
|
for _, pair := range stack {
|
|
c := byte(pair[0] + 'a')
|
|
for i := 0; i < pair[1]; i++ {
|
|
arr = append(arr, c)
|
|
}
|
|
}
|
|
return string(arr)
|
|
}
|
|
|
|
// 解法二 暴力
|
|
func removeDuplicates1(s string, k int) string {
|
|
arr, count, tmp := []rune{}, 0, '#'
|
|
for _, v := range s {
|
|
arr = append(arr, v)
|
|
for len(arr) > 0 {
|
|
count = 0
|
|
tmp = arr[len(arr)-1]
|
|
for i := len(arr) - 1; i >= 0; i-- {
|
|
if arr[i] != tmp {
|
|
break
|
|
}
|
|
count++
|
|
}
|
|
if count == k {
|
|
arr = arr[:len(arr)-k]
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return string(arr)
|
|
}
|