问题理解
我们需要删除字符串中所有相邻且相同的字符对,并重复这个过程直到无法继续删除。例如:
输入 "abbaca":
删除 "bb" → "aaca"
删除 "aa" → "ca"(最终结果)
解法思路
使用栈来模拟这个过程:
遍历字符串中的每个字符
如果栈不为空且栈顶元素等于当前字符,弹出栈顶元素(表示删除这对相邻重复项)
否则,将当前字符压入栈中
最后将栈中剩余字符拼接成字符串返回
class Solution:
def removeDuplicates(self, s: str) -> str:
res = list()
for item in s:
if res and res[-1] == item:
res.pop()
else:
res.append(item)
return "".join(res)这是一个经典的字符串处理问题,可以通过栈(Stack)这种数据结构高效解决。下面我将详细解析这个解法,并分析代码的每一部分。
问题理解
我需要删除字符串中所有相邻且相同的字符对,并重复这个过程直到无法继续删除。例如:
输入 "abbaca":
删除 "bb" → "aaca"
删除 "aa" → "ca"(最终结果)
解法思路
使用栈来模拟这个过程:
遍历字符串中的每个字符
如果栈不为空且栈顶元素等于当前字符,弹出栈顶元素(表示删除这对相邻重复项)
否则,将当前字符压入栈中
最后将栈中剩余字符拼接成字符串返回
代码解析
class Solution:
def removeDuplicates(self, s: str) -> str:
res = list()
for item in s:
if res and res[-1] == item:
res.pop()
else:
res.append(item)
return "".join(res)示例分析
以输入 "abbaca" 为例:
'a' → 栈为空 → 压入 ['a']
'b' → 栈顶 'a' ≠ 'b' → 压入 ['a', 'b']
'b' → 栈顶 'b' == 'b' → 弹出 → ['a']
'a' → 栈顶 'a' == 'a' → 弹出 → []
'c' → 栈为空 → 压入 ['c']
'a' → 栈顶 'c' ≠ 'a' → 压入 ['c', 'a']
最终结果:"ca"