题目描述
给定 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 <= 200 s 和 t 只含有小写字母以及字符 '#'
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ba… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路
- 循环两个字符串,以长度最长的作为循环长度。
- 用两个数组作为栈用来模拟在文本编辑器的打印过程。
- 遇到“#”吐出前一位,不是“#”则推入一位,s和t均如此,直到结束。
- 最后还原所有有效字符后的字符串比较。
题解代码
* @lc app=leetcode.cn id=844 lang=javascript
*
* [844] 比较含退格的字符串
*/
// @lc code=start
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var backspaceCompare = function(s, t) {
let sArr=[];//接收s最终的应该显示的所有字符
let tArr=[];//接收t最终的应该显示的所有字符
let length = s.length > t.length? s.length : t.length;//取二者最长的最为循环条件
for (let i = 0; i < length; i++) {
//遇到“#”吐出前一位
//不是“#”则推入一位
//s和t均如此,直到结束
if(s[i] && s[i] !== "#"){
sArr.push(s[i]);
}else if(s[i] && s[i] === "#"){
sArr.pop();
}
if(t[i] && t[i] !== "#"){
tArr.push(t[i]);
}else if(t[i] && t[i] === "#"){
tArr.pop();
}
}
//最后还原所有有效字符后的字符串比较
return sArr.toString() === tArr.toString();
};
// @lc code=end