LeetCode|Day8|1047. 删除字符串中的所有相邻重复项|Python刷题笔记
LeetCode|Day8|1047. 删除字符串中的所有相邻重复项|Python刷题笔记
🗓️ 本文属于【LeetCode 简单题百日计划】系列
👉 点击查看系列总目录 >>
📌 题目简介
题号:1047. 删除字符串中的所有相邻重复项
难度:简单
题目链接:点击跳转
🧾 题目描述(简要)
给出由小写字母组成的字符串 s
,请你删除字符串中 所有相邻重复项,返回最终的字符串。
你必须 每次删除两个相邻的相同字符,直到无法继续删除。
示例:
输入:s = "abbaca"
输出:"ca"
解释:
例如,输入字符串 "abbaca" ,经处理后得到 "ca" ,其中,"bb" 被删除,"aa" 被删除。
💡 解法:使用栈来存储字符
class Solution:def removeDuplicates(self, s: str) -> str:stack = []for char in s:if stack and stack[-1] == char:stack.pop() # 遇到相同的字符就弹出栈顶字符else:stack.append(char)return ''.join(stack)
🧠 我的理解
- 遇到相邻重复字符时,利用栈的特性,删除栈顶字符;
- 如果栈顶字符与当前字符相同,则弹出栈顶,否则入栈;
- 最后将栈中的字符连接成字符串输出;
- 时间复杂度是 O(n),空间复杂度是 O(n),适用于此类问题。
📌 基础语法复习:
stack.append(char)
:将元素推入栈;stack.pop()
:弹出栈顶元素;stack[-1]
:访问栈顶元素;''.join(stack)
:将栈中的字符连接成一个字符串。