本文参考代码随想录
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 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 = "#a#c"
输出:true
解释:S 和 T 都会变成 "c"。
示例 4:
输入:S = "a#c", T = "b"
输出:false
解释:S 会变成 "c",但 T 仍然是 "b"
思路
栈
python
class Solution:
def get_string(self, s: str):
result = []
for c in s:
if c != "#":
result.append(c)
elif len(result) > 0:
result.pop()
return result
def backspaceCompare(self, s: str, t: str) -> bool:
return self.get_string(s) == self.get_string(t)
双指针
同时从后向前遍历S和T(i初始为S末尾,j初始为T末尾),记录#的数量,模拟消除的操作,如果#用完了,就开始比较S[i]和S[j]。
如果S[i]和S[j]不相同返回false,如果有一个指针(i或者j)先走到的字符串头部位置,也返回false。
python
class Solution:
def backspaceCompare(self, s: str, t: str) -> bool:
i = len(s) - 1
j = len(t) - 1
s_skip = t_skip = 0
while i >= 0 or j >= 0:
while i >= 0:
if s[i] == "#":
i -= 1
s_skip += 1
elif s_skip > 0:
s_skip -= 1
i -= 1
else:
break
while j >= 0:
if t[j] == "#":
j -= 1
t_skip += 1
elif t_skip > 0:
j -= 1
t_skip -= 1
else:
break
if i < 0 or j < 0:
break
elif s[i] != t[j]:
return False
i -= 1
j -= 1
return i == j == -1