leetcode 20 有效的括号

思路:利用栈先进去的后处理,当是一个右括号就判断栈顶是否是匹配的左括号,如果不是直接返回false,如果匹配,弹出栈顶

如果是左括号就入栈

第一次

 1 /**
 2  * @param {string} s
 3  * @return {boolean}
 4  */
 5 var isValid = function(s) {
 6   const len = s.length
 7   if(len % 2 != 0) return false
 8   let stack = [] 
 9   let L = ['(','[','{']
10   let R = [')',']','}']
11   for(let i = 0; i< len; i++){
12     if(L.includes(s[i])){
13       stack.push(s[i])
14     }else{
15       let x = R.indexOf(s[i])
16       if(L[s[i]] != stack.pop()){
17         return false
18       }
19     }
20   }
21   return stack.length ? false:true
22 };

第二次

var isValid = function (s) {
  const n = s.length;
  if (n % 2 === 1) {
    return false;
  }
  const pairs = new Map([
    [')', '('],
    [']', '['],
    ['}', '{']
  ]);
  const stk = [];
  for(let i = 0; i < n; i++){
    if(pairs.has(s[i])){
      if(pairs.get(s[i]) !== stk[stk.length - 1] ){
        return false
      }else{
        stk.pop()
      }
    }
    else{
      stk.push(s[i])
    }
  }
  return !stk.length;
};

 

posted @ 2021-02-16 21:05  张最棒  阅读(92)  评论(1编辑  收藏  举报