/** 394. 字符串解码
* @param {string} s
* @return {string}
*/
var decodeString =function(s){
const numStack =[];
const strStack =[];
let num =0;
let result ="";for(let char of s){// 不能用typeof去判断if(!isNaN(char)){
num = num *10+Number(char);}elseif(char ==="["){// 上一个字符串
strStack.push(result);// 入栈后清空
result ="";
numStack.push(num);// 入栈后清0
num =0;}elseif(char ==="]"){
let repeatNum = numStack.pop();// 存储的str+ 当前得到的
result = strStack.pop()+ result.repeat(repeatNum);}else{
result += char;}}return result;};
console.log(decodeString("3[a2[c]]"));// 数字在前 双栈 字符串和数字// 数字在后, 单栈,// 区分数字/{/} 三种场景的操作
402. 移掉 K 位数字
/**
* @param {string} num
* @param {number} k
* @return {string}
*/// 思路 单调栈// 边界:空数组返回0// for循环数组// while循环 栈顶大于当前值, 栈顶弹出 k--// k 有剩余, 则栈顶继续pop// 如果首位是0 ,首位移除shift
var removeKdigits =function(num, k){
const stack =[];if(num.length === k)return"0";for(let i =0; i < num.length; i++){while(stack.length && stack[stack.length -1]>Number(num[i])&& k){
stack.pop();
k--;}
stack.push(Number(num[i]));}while(k){
stack.pop();
k--;}while(stack.length >1&& stack[0]===0){
stack.shift();}
console.log(stack);return stack.join("");};
console.log(removeKdigits("1432219",3));
739.每日温度—1
/**
* @param {number[]} temperatures
* @return {number[]}
*/
var dailyTemperatures =function(temperatures){
const stack =[];
const len = temperatures.length;
const arr =Array(len).fill(0);for(let i =0; i < temperatures.length; i++){
const cur = temperatures[i];while(stack.length && cur > temperatures[stack[stack.length -1]]){
const index = stack.pop();
arr[index]= i - index;}
stack.push(i);}
console.log(arr);};dailyTemperatures([73,74,75,71,69,72,76,73]);// 输入: temperatures = [73,74,75,71,69,72,76,73]// 输出: [1,1,4,2,1,1,0,0]