[路飞]_LeetCode_844. 比较含退格的字符串

295 阅读1分钟

题目

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。

如果相等,返回 true ;否则,返回 false 。

示例 1:

输入: s = "ab#c", t = "ad#c"
输出: true
解释: S 和 T 都会变成 “ac”。

来源:力扣(LeetCode)leetcode-cn.com/problems/ba…

解题思路

  1. #号代表回退,也就是把前面的字符去掉,使用栈可以很方便地处理这种情况,字符依次入栈,当遇到#号时把栈顶元素去掉;
  2. 两个字符串通过第1步操作后再对比是否相等即可;
  3. 例子中的ab#c遇到#号去掉前面的b后等于acad#c遇到#好去掉前面的d后等于ac,所以返回 true

代码实现

var backspaceCompare = function (s, t) {
  //把两个字符串的#号和#号前的字符去掉后对比是否相等
  return convertString(s) === convertString(t)
};

var convertString = function (s) {
  //遍历字符串的字符,遇到#时出栈,否则入栈
  let stack = []
  for (let c of s) {
    if (c === '#') {
      stack.pop()
    } else {
      stack.push(c)
    }
  }

  return stack.join('')
}

如有错误欢迎指出,欢迎一起讨论!