题目搬运者
https://leetcode-cn.com/problems/backspace-string-compare/
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
思路 双指针
从数组尾部还是比对
- 若 s[i] 是# 记录#的个数,并往前退;t 数组同理,同操作;
- 在往前退停下来的时候,比较字符;
class Solution(object):
def backspaceCompare(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
i = len(s) - 1
j = len(t) - 1
sSkip, tSkip = 0, 0
while i >= 0 or j >= 0:
while i >= 0:
if s[i] == '#':
sSkip += 1
i -= 1
elif sSkip > 0:
sSkip -= 1
i -= 1
else:
break
while j >= 0:
if t[j] == '#':
tSkip += 1
j -= 1
elif tSkip > 0:
tSkip -= 1
j -= 1
else:
break
if i >= 0 and j >= 0:
if s[i] != t[j]:
return False
else:
if i >= 0 or j >= 0:
return False
i -= 1
j -= 1
return True
思路 附加空间
遇到字符则推入,遇到#则弹出字符;
最后比较两数组。
def backspaceCompare1(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
slen = len(s)
sRes = []
for i in range(slen):
if s[i] != '#':
sRes.append(s[i])
elif sRes:
sRes.pop()
tlen = len(t)
tRes = []
for i in range(tlen):
if t[i] != '#':
tRes.append(t[i])
elif tRes:
tRes.pop()
if tRes == sRes:
return True
else:
return False