简单 | 双指针 | 力扣
一. 题目描述
给定 **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;};
