844 比较含退格的字符串
题目 844 比较含退格的字符串
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 1:
输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。
示例 2:
输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。
示例 3:
输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。
思路
直接想到了用栈的结构解决,遇到#就弹出元素。
但是要注意的是如果栈为空怎么弹出元素,所以要把所有情况都考虑清楚
- 栈不空,元素为#(弹出元素)
- 栈空,元素为# (直接continue循环)
- 栈不空,元素不为# (append添加)
- 栈空,元素不为# (append添加)
后两种情况合并
代码
class Solution:
def backspaceCompare(self, s: str, t: str) -> bool:
stack1 = []
stack2 = []
for i in s:
if stack1 != [] and i == "#":
stack1.pop()
elif stack1 == [] and i == "#":
continue
else:
stack1.append(i)
for i in t:
if stack2 != [] and i == "#":
stack2.pop()
elif stack2 == [] and i == "#":
continue
else:
stack2.append(i)
return stack1 == stack2
优化后的代码
class Solution:
def get_res(self, str):
stack = []
for i in str:
if stack != [] and i == "#":
stack.pop()
elif stack == [] and i == "#":
continue
else:
stack.append(i)
return stack
def backspaceCompare(self, s: str, t: str) -> bool:
return self.get_res(s) == self.get_res(t)