力扣刷题844——比较含退格的字符串
力扣刷题844——比较含退格的字符串(简单类)
题目:
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
输入: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”。
标准答案(python3版本):
class Solution:def backspaceCompare(self, s: str, t: str) -> bool:def next_valid_char(string, index):backspace = 0while index >= 0:if string[index] == '#':backspace += 1elif backspace > 0:backspace -= 1else:breakindex -= 1return indexi, j = len(s) - 1, len(t) - 1while i >= 0 or j >= 0:i = next_valid_char(s, i)j = next_valid_char(t, j)if i < 0 and j < 0:return Trueif i < 0 or j < 0:return Falseif s[i] != t[j]:return Falsei -= 1j -= 1return True
解析
1、从后往前遍历字符串
2、遇到#时记录需要跳过的字符数
3、跳过被退格的字符
4、比较有效字符是否相同
5、时间复杂度O(n+m),空间复杂度O(1)
关键点:
1、必须从后往前处理
2、需要正确处理连续的#
3、处理完全退格的情况
4、提前终止不匹配的情况