简单 | 双指针 | 力扣
一. 题目描述
给定 **s**
和 **t**
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回**true**
。**#**
代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
二. 题目示例
:::tips
输入:s = “ab#c”, t = “ad#c”
输出:true
:::
:::tips
输入:s = “ab##”, t = “c#d#”
输出:true
:::
:::tips
输入:s = “a#c”, t = “b”
输出:false
:::
三. 题目解答
1. 思路
利用同向倒序双指针,定义 **skip**
表示当前待删除的字符的数量。每次我们遍历到一个字符:
- 若该字符为退格符,则我们需要多删除一个普通字符,我们让
**skip++**
; - 若该字符为普通字符,若
**skip**
为 0,则说明当前字符不需要删去,若**skip**
不为 0,则说明当前字符需要删去,我们让**skip--**
。2. 代码
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var backspaceCompare = function(s, t) {
let skipS=0, p1=s.length-1;
let skipT=0, p2=t.length-1;
while(p1>=0 || p2>=0){
while(p1 >= 0){
//处理掉#
if(s[p1] == '#'){
skipS++;
p1--;
}else if(skipS > 0){
// 不是#但有退格数
skipS--;
p1--;
}else {
// 不是#也没有退格数 需要退出比较
break;
}
}
while(p2 >= 0){
if(t[p2] == '#'){
skipT++;
p2--;
} else if(skipT > 0){
skipT--;
p2--;
} else {
break;
}
}
if (s[p1]==t[p2]){
p1--;
p2--;
} else {
return false;
}
}
return true;
};