题目
844. 比较含退格的字符串
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。
如果相等,返回 true ;否则,返回 false 。
注意:如果对空文本输入退格字符,文本继续为空。
思路1:
这题首先想到的就是用栈数据结构来解决,用栈去分别处理两个字符串,比较处理后的结果。
处理的过程:遇到字符,则入栈,遇到#,则出栈。
代码如下:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var backspaceCompare = function(s, t) {
let stack_s = [];
let stack_t = [];
for(let i=0;i<s.length;i++){
if(s[i]!='#'){
stack_s.push(s[i])
}else{
stack_s.pop()
}
}
for(let i=0;i<t.length;i++){
if(t[i]!='#'){
stack_t.push(t[i])
}else{
stack_t.pop()
}
}
return stack_s.join('') == stack_t.join('')
};
思路2:
也可以用双指针的方法去做,申明两个指针ps和pt,分别指向两个字符串的末尾,申明两个变量,用于记录遇到'#'后,该删除的字符串的数量,分别为ds和dt
- 如果指针位置是'#',则指针向前走一格ps--,并且记录待删除长度ds++
- 如果指针位置是字符,并且待删除长度ds>0,则指针向前走以为ps--,待删除长度ds--
- 如果指针位置是字符,且待删除长度为0,则将这个字符拿去比较
代码如下:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var backspaceCompare = function(s, t) {
let ps=s.length-1,pt=t.length-1;
let ds = 0,dt = 0;
while(ps>=0 || pt>=0){
while(ps>=0){
if(s[ps] == '#'){
ps--;
ds++;
}else if(ds>0){
ps--;
ds--;
}else{
break
}
}
while(pt>=0){
if(t[pt] == '#'){
pt--;
dt++;
}else if(dt>0){
pt--;
dt--;
}else{
break
}
}
if(s[ps] != t[pt]){
return false
}
ps--;
pt--;
}
return true
};