Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目分析
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意: 如果对空文本输入退格字符,文本继续为空。
思路讲解
利用栈的特性,"#"字符表示出栈,"字符"表示入栈,将两个字符串变成没有"#"的字符串,然后进行比较
- 创建一个栈,用来处理两个字符串
- 定义一个方法来进行处理
- 遍历字符串,将字符串的每个元素压入栈
- 如果遇到"#"就弹出一个元素
- 当遍历完整个字符串的时候,我们就将栈中的字符组成字符串进行返回
- 将传入的两个字符串传入函数中,得到返回的两个字符串,比较两个字符串是否相等
示例
输入: s = "ab#c", t = "ad#c" 输出: true
解释:遇到“#”,删除#前面的一个字符, s 和 t 都会变成 "ac"。
输入: s = "ab##", t = "c#d#" 输出: true
解释: 遇到“#”,删除#前面的一个字符,s 和 t 都会变成 ""。
输入: s = "a#c", t = "b" 输出: false
解释:遇到“#”,删除#前面的一个字符,s 会变成 "c",但 t 仍然是 "b"。
代码
/*
* @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) {
return processed(s) === processed(t)
};
var processed = function (str) {
let stack = []
for (ch of str) {
if (ch === '#') stack.pop()
else stack.push(ch)
}
return stack.join('')
}
// @lc code=end