给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。
如果相等,返回 true ;否则,返回 false 。
注意: 如果对空文本输入退格字符,文本继续为空。
示例 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, t.length <= 200s和t只含有小写字母以及字符'#'
用StringBuffer:
private static String build(String str){
StringBuffer sb = new StringBuffer();
int len = str.length();
for (int i = 0 ; i < len;i++){
char ch = str.charAt(i);
if(ch != '#'){
sb.append(ch);
}
else if(sb.length()>0){
sb.deleteCharAt(sb.length()-1);
}
}
return sb.toString();
}
双指针:
public static boolean backspaceCompare(String s, String t) {
int i = s.length() - 1;
int j = t.length() - 1;
int skipi = 0;
int skipj = 0;
while (i >= 0 || j >= 0){
while (i>=0){
char ch = s.charAt(i);
if(ch == '#'){
skipi++;
i--;
}
else {
if(skipi >0 ){
skipi--;
i--;
} else {
break;
}
}
}
while (j>=0){
char ch = t.charAt(j);
if(ch == '#'){
skipj++;
j--;
}
else {
if(skipj >0 ){
skipj--;
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;
}