给定 s
和 t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true
。#
代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
解:同时从后向前遍历S和T(i初始为s末尾,j初始为t末尾),记录#的数量,模拟消除的操作,如果#用完了,就开始比较S[i]和S[j]。
-
时间复杂度:O(n + m)
-
空间复杂度:O(1)
class Solution {
public boolean backspaceCompare(String s, String t) {
int sSkipNum = 0; // 记录S的#数量
int tSkipNum = 0; // 记录T的#数量
int i = s.length() - 1;
int j = t.length() - 1;
while (true) {
while (i >= 0) { // 从后向前,消除S的#
if (s.charAt(i) == '#') sSkipNum++;
else {
if (sSkipNum > 0) sSkipNum--;
else break;
}
i--;
}
while (j >= 0) { // 从后向前,消除T的#
if (t.charAt(j) == '#') tSkipNum++;
else {
if (tSkipNum > 0) tSkipNum--;
else break;
}
j--;
}
// 后半部分#消除完了,接下来比较S[i] != T[j]
if (i < 0 || j < 0) break; // S 或者T 遍历到头了
if (s.charAt(i) != t.charAt(j)) return false;
i--;j--;
}
// 说明S和T同时遍历完毕
if (i == -1 && j == -1) return true;
return false;
}
}