给定 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;}
}