这是我参与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 <= 200s和t只含有小写字母以及字符'#'
这个题就比较简单了,根据题直接撸代码就可以了,還是写下思路吧
- for...of 循环字符串,并且把他存在一个数组中,
- 如果是 # 号的话,就删除最后一个,不是的话就一直push
- 然后将数组转化成字符串,
/*
* @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 <= 10000 <= pushed[i] <= 1000pushed的所有元素 互不相同popped.length == pushed.lengthpopped是pushed的一个排列
这个题就比上个题有意思一点了
- 先循环 pushed 数组,并把这个值用数组 stack 存起来
- 如果这个 stack 的最后一个元素的值与 popped 的数组第一项开始比较如果一样,则 pop 出去,并且循环 popped 这个数组,看下个值是否一样
- 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