第9天-Backspace String Compare
问题描述:比较两个字符串是否相等。其中两个字符穿中有“#”非法符号,如遇到这一符号则删除前一个合法字符,最后比较的是两个经过处理后的合法字符。
解法1:设置两个数组存储每个字符串真正有意义的字符,在判断两者是否相等。时间复杂度为O(n);空间复杂度为O(1)
class Day8_Solution_1:
def backspaceCompare(self, S, T):
result_S = []
result_T = []
for s in S:
if s!= '#':
result_S.append(s)
else:
if result_S:
result_S.pop()
for t in T:
if t != '#':
result_T.append(t)
else:
if result_T:
result_T.pop()
return result_S == result_T
上面的代码是我自己第一反应写出来的,但是题中要求不能用额外的空间。所以才有了下面的两个版本的代码:
解法2:leetcode官方给的解答。这个代码基本看懂了,通过一个迭代器返回合法的字符,从后往前遍历字符串,设置一个指针skip记录合法字符前的#个数,如果遇到合法字符,则skip-1,直到skip为0时,当前字符为合法字符,输出到迭代器中。然后比较两个字符串迭代器的输出是否都相等。
def F(S):
skip = 0
for x in reversed(S):
if x == '#':
skip += 1
elif skip:
skip -= 1
else:
yield x
def backspaceCompare(S, T):
return all(x == y for x, y in itertools.zip_longest(F(S), F(T)))
时间复杂度为O(n),空间复杂度为O(1)
还有一个版本没怎么看懂,贴下作者网址,过后再看:
本文探讨了比较含#特殊字符的字符串问题,提出三种解决方案:使用额外数组存储有效字符、迭代器返回有效字符及一未详述方法。重点介绍了迭代器解法,其时间复杂度为O(n),空间复杂度为O(1)。

486

被折叠的 条评论
为什么被折叠?



