题目链接
解题思路
- 重构字符串:将给定的字符串中的退格符和应当被删除的字符都去除,还原给定字符串的一般形式,然后直接比较两字符串是否相等即可
- 我的解法:循环遍历,复杂度O(
n
2
n^2
n2)
- 大佬解法:利用栈,复杂度O(
n
+
m
n+m
n+m)
AC代码
class Solution {
public boolean backspaceCompare(String S, String T) {
return backspace(S).replaceAll(" ", "").equals(backspace(T).replaceAll(" ", ""));
}
public static String backspace(String s) {
int len = s.length();
char[] tmp = s.toCharArray();
for (int i = 0; i < len; i++) {
for (int j = i; j >= 0; j--) {
if (tmp[i] == '#' && 'a' <= tmp[j] && tmp[j] <= 'z') {
tmp[i] = ' ';
tmp[j] = ' ';
break;
}
}
}
return new String(tmp).replaceAll("#"," ");
}
}
class Solution {
public boolean backspaceCompare(String S, String T) {
return build(S).equals(build(T));
}
public String build(String str) {
StringBuffer ret = new StringBuffer();
int length = str.length();
for (int i = 0; i < length; ++i) {
char ch = str.charAt(i);
if (ch != '#') {
ret.append(ch);
} else {
if (ret.length() > 0) {
ret.deleteCharAt(ret.length() - 1);
}
}
}
return ret.toString();
}
}