← [ BACK_TO_NOTES ]

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

消除类栈入门题:当前字符如果和栈顶相同,就和最近留下的字符一起消掉。

#algorithm #snippet #evergreen #leetcode #stack

[!info] related notes 算法面试题型 MOC 栈

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

题目链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/

题型判断

这是最典型的“相邻消除”类栈题。

关键信号:

  • 当前字符只会和前面最近留下来的字符发生反应
  • 消除之后,新的相邻关系可能继续出现

所以用栈维护“消除后剩下的字符串”。

核心思路

  • 如果当前字符和栈顶相同,弹栈,表示这两个字符一起消掉
  • 否则把当前字符压栈
  • 最后把栈里的字符拼起来

为什么这里适合用栈

因为消除之后,新的相邻字符一定出现在“剩余串的末尾”,也就是栈顶附近。

JavaScript

var removeDuplicates = function(s) {
    const stack = [];

    for (const ch of s) {
        if (stack.length && stack[stack.length - 1] === ch) {
            stack.pop();
        } else {
            stack.push(ch);
        }
    }

    return stack.join('');
};

一句话总结

把栈看成“已经处理好的结果串”,当前字符只需要和结果串末尾比较。

创建于 2026/3/19 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本