比较含退格的字符串
题目:
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 1:
输入:S = “ab#c”, T = “ad#c”
输出:true
解释:S 和 T 都会变成 “ac”。
示例 2:
输入:S = “ab##”, T = “c#d#”
输出:true
解释:S 和 T 都会变成 “”。
示例 3:
输入:S = “a##c”, T = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。
示例 4:
输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。
提示:
1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 ‘#’。
解题思路: 看到题目就想到了用栈或者StringBuffer, 最后选择了StringBuffer, 在字符串中查找’#‘找到了就判断’#‘下标是否为0, 如果为0说明’#‘前没有字符就只需要删除’#’, 否则就删除’#'和前一个字符.
class Solution {
public boolean backspaceCompare(String S, String T) {
StringBuffer s = new StringBuffer(S);
StringBuffer t = new StringBuffer(T);
f(s);
// System.out.println("s = " + s);
f(t);
// System.out.printf("t = %s", t);
return s.toString().equals(t.toString());
}
private void f(StringBuffer s) {
int idx = s.indexOf("#");
while(idx != -1) {
if(idx == 0) {
s.deleteCharAt(idx);
}
else s.delete(idx - 1, idx + 1);
// System.out.println(s);
idx = s.indexOf("#");
}
}
}
ps:需要注意的一个点是: StringBuffer的equals方法没有进行重写, 所以要比较两个StringBuffer是否相等需要转化成String进行比较.