代码解析
def getElimination(string):
stack = [] # 初始化一个空栈
for word in string: # 遍历字符串中的每个字符
if stack and word == stack[-1]: # 检查栈是否非空 且 当前字符与栈顶元素相同
stack.pop() # 弹出栈顶元素(相邻的字符消除)
else:
stack.append(word) # 否则将当前字符添加到栈中
return stack # 返回栈中的元素
步骤解析
-
初始化栈:
stack = []
创建一个空列表来作为栈,用于存放还未消除的字符。
-
遍历字符串:
for word in string:
通过循环遍历输入字符串中的每个字符(即word
)。
-
判断与弹出:
if stack and word == stack[-1]:
:- 这里通过两部分条件进行判断:
stack
非空,表示栈中有元素。word
等于stack[-1]
(栈顶元素)时,说明当前字符和栈顶元素相同。
- 如果满足条件,则执行
stack.pop()
,从栈中移除栈顶元素。这相当于“消除”相邻的相同字符。
- 这里通过两部分条件进行判断:
-
添加字符:
else: stack.append(word)
:- 如果当前字符和栈顶元素不同,或者栈为空,则将当前字符
word
添加到栈中。
- 如果当前字符和栈顶元素不同,或者栈为空,则将当前字符
-
返回结果:
return stack
:最后返回栈中的元素,栈中只包含未被消除的字符。
输入 "mmbbC"
的处理过程
我们具体分析一下输入字符串 "mmbbC"
的处理过程:
-
初始:
stack = []
-
处理
m
:- 栈为空,添加
m
→stack = ['m']
- 栈为空,添加
-
处理
m
:stack
非空且当前word
(m
)等于stack[-1]
(m
),弹出栈顶元素 →stack = []
-
处理
b
:- 栈为空,添加
b
→stack = ['b']
- 栈为空,添加
-
处理
b
:stack
非空且当前word
(b
)等于stack[-1]
(b
),弹出栈顶元素 →stack = []
-
处理
C
:- 栈为空,添加
C
→stack = ['C']
- 栈为空,添加
最终输出
经过上述步骤,输入 "mmbbC"
最终返回的栈是 ['C']
。