思路:
字符串变成字符数组
从后往前,先统计#个数,根据#个数删除字符
最后在变回字符串
class Solution {
public boolean backspaceCompare(String s, String t) {
return back(s).equals(back(t));
}
public String back(String str) {
int count = 0;
StringBuffer sb = new StringBuffer().append(str);
for (int i = sb.length() - 1; i >= 0; i--) {
if (sb.charAt(i) == '#') {
sb.deleteCharAt(i);
count++;
} else if (count > 0) {
sb.deleteCharAt(i);
count--;
}
}
return sb.toString();
}
}
思路:
若该字符为退格符,则我们需要多删除一个普通字符,我们让 skipS/T 加 1;
若该字符为普通字符:
若 skipS/T 为 0,则说明当前字符不需要删去;
若 skipS/T 不为 0,则说明当前字符需要删去,我们让 skipS/T 减 1;
两个循环结束后,比较S和T位置的字符,错误情况:
两个字符不相等 错误
其中有一个结束,另一个还没结束 错误
其他正确
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;
}
}