leetcode 844 && 946

132 阅读1分钟

这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

[844] 比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意: 如果对空文本输入退格字符,文本继续为空。  

示例 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 = "b"
输出: false
解释: s 会变成 "c",但 t 仍然是 "b"

 

提示:

  • 1 <= s.length, t.length <= 200
  • s 和 t 只含有小写字母以及字符 '#'

这个题就比较简单了,根据题直接撸代码就可以了,還是写下思路吧

  1. for...of 循环字符串,并且把他存在一个数组中,
  2. 如果是 # 号的话,就删除最后一个,不是的话就一直push
  3. 然后将数组转化成字符串,
/*
 * @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)
};

function processed(str) {
  let stack = []
  for(s of str){
    if(s === '#'){
      stack.pop()
    }else{
      stack.push(s)
    }
  }
  return stack.join('')
}
// @lc code=end


[946] 验证栈序列

给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。

 

示例 1:

输入: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出: true
解释: 我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

输入: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出: false
解释: 1 不能在 2 之前弹出。

 

提示:

  • 1 <= pushed.length <= 1000
  • 0 <= pushed[i] <= 1000
  • pushed 的所有元素 互不相同
  • popped.length == pushed.length
  • popped 是 pushed 的一个排列

这个题就比上个题有意思一点了

  1. 先循环 pushed 数组,并把这个值用数组 stack 存起来
  2. 如果这个 stack 的最后一个元素的值与 popped 的数组第一项开始比较如果一样,则 pop 出去,并且循环 popped 这个数组,看下个值是否一样
  3. stack 最终是个空数组的话,那就说明可以按照要求的方式出栈完毕返回 true, 否则就是 false
/*
 * @lc app=leetcode.cn id=946 lang=javascript
 *
 * [946] 验证栈序列
 */

// @lc code=start
/**
 * @param {number[]} pushed
 * @param {number[]} popped
 * @return {boolean}
 */
var validateStackSequences = function(pushed, popped) {
  let stack = []
  let popIndex = 0
  for(let i = 0; i< pushed.length; i++){
    let cur = pushed[i]
    stack.push(cur)
    while (stack.length && stack[stack.length -1] === popped[popIndex]) {
      stack.pop()
      popIndex ++
    }
  }
  return !stack.length
};
// @lc code=end