zoukankan      html  css  js  c++  java
  • 20、有效的括号 | JS-栈的应用

    给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
     

    示例 1:

    输入:s = "()"
    输出:true
    示例 2:

    输入:s = "()[]{}"
    输出:true
    示例 3:

    输入:s = "(]"
    输出:false
    示例 4:

    输入:s = "([)]"
    输出:false
    示例 5:

    输入:s = "{[]}"
    输出:true

    题解:

    可以用字典Map

     1 /**
     2  * @param {string} s
     3  * @return {boolean}
     4  */
     5 var isValid = function(s) {
     6     if(s.length % 2 ===1) return false;
     7     const stack = [];
     8     const map = new Map();
     9     map.set('(',')');
    10     map.set('{','}');
    11     map.set('[',']');
    12     for(let i=0; i<s.length; i+=1){
    13         const c = s[i];
    14         if(map.has(c)) {
    15             stack.push(c);
    16         }else{
    17             const t = stack[stack.length - 1];
    18             if(map.get(t) === c) {
    19                 stack.pop();
    20             }else{
    21                 return false;
    22             }
    23         }
    24     }
    25     return stack.length === 0;
    26 };
     1 /**
     2  * @param {string} s
     3  * @return {boolean}
     4  */
     5 var isValid = function(s) {
     6     if (s.length % 2 ===1) { return false; } //如果是奇数说明一定不匹配
     7     const stack = [];
     8     for(let i=0;i<s.length;i++){
     9         const c = s[i];  //拿到字符
    10         if(c ==='(' || c ==='{' || c === '[') {
    11             stack.push(c);
    12         } else {
    13             const t = stack[stack.length -1]; //t拿到栈顶
    14             if(
    15                 (t === '(' && c === ')') ||
    16                 (t === '{' && c === '}') ||
    17                 (t === '[' && c === ']') 
    18             ) {
    19                 stack.pop();
    20             } else {
    21                 return false;
    22             }
    23         }
    24     }
    25     return stack.length === 0;
    26 };
  • 相关阅读:
    System V 消息队列
    《APUE》读书笔记第十五章进程间通信
    感冒休息
    《APUE》读书笔记—第十一章线程
    消息队列和管道的区别(转载)
    《APUE》读书笔记第十八章终端I/O
    《APUE》读书笔记第十九章伪终端
    《APUE》读书笔记第十六章网络IPC:套接字
    [转]阿里要走102年,阿里的工程师能走多远呢?
    Posix消息队列
  • 原文地址:https://www.cnblogs.com/oaoa/p/14822028.html
Copyright © 2011-2022 走看看