1.题目描述:
给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。
2.使用StringBuilder普通解法:
class Solution {
public boolean backspaceCompare(String s, String t) {
return helper(s).equals(helper(t));
}
public String helper(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != '#') sb.append(s.charAt(i));//拼接字符串
else {
if (sb.length() != 0) sb.delete(sb.length() - 1, sb.length());//需要考虑被删光的情况
}
}
return sb.toString();//StringBuilder没有重写equals方法
}
}
3.双指针:从后往前遍历,空间复杂度降低,较难。
class Solution {
public boolean backspaceCompare(String s, String t) {
int i = s.length() - 1, j = t.length() - 1;
int skipS = 0, skipT = 0;
while (i >= 0 || j >= 0) {
while (i >= 0) {
if (s.charAt(i) == '#') {
skipS++;
i--;
} else if (skipS > 0) {
skipS--;
i--;
} else break;
}
while (j >= 0) {
if (t.charAt(j) == '#') {
skipT++;
j--;
} else if (skipT > 0) {
skipT--;
j--;
} else break;
}
if (i >= 0 && j >= 0) {
if (s.charAt(i) != t.charAt(j)) return false;
} else {
if (i >= 0 || j >= 0) return false;
}
i--;
j--;
}
return true;
}
}