[路飞] 25——leetcode - [844] 比较含退格的字符串

167 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

844. 比较含退格的字符串

题目分析

给定 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