LeetCode 1047. 删除字符串中的所有相邻重复项

题目描述

1047. 删除字符串中的所有相邻重复项

image-20250419074249297

思路分析

我们可以使用栈来解决这个问题。

  • 遍历字符串中的每个字符,如果栈不为空且栈顶元素与当前字符相同,则弹出栈顶元素(表示删除相邻重复项);
  • 否则,将当前字符压入栈中。
  • 最后,栈中的元素就是去除相邻重复项后的结果。

image-20250508022523716

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func removeDuplicates(s string) string {
    stack := []byte{}

    for i := 0; i < len(s); i++ {
        if len(stack) > 0 && stack[len(stack)-1] == s[i] {
            // 如果栈顶元素与当前字符相同,则弹出栈顶元素
            stack = stack[:len(stack)-1]
        } else {
            // 否则,将当前字符压入栈中
            stack = append(stack, s[i])
        }
    }

    return string(stack)
}
  • 时间复杂度:O (n),其中 n 是字符串的长度。我们只需遍历字符串一次。
  • 空间复杂度:O (n),在最坏情况下,栈中可能会存储所有字符。

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/58637969
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!