zoukankan      html  css  js  c++  java
  • 给定一个只包含”(“,”)“,”[“,”]“,”{“,”}“的字符串,判断字符串是否有效

    前言

      【典型例子】

          给定一个只包含”(“,”)“,”[“,”]“,”{“,”}“的字符串,判断字符串是否有效,字符串有效需要满足如下条件:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合。

          注意:空字符串可以被认为是有效字符串。

    代码

    function isValid(s) {
      let arr = [];
      s = s.split('');
      for( var v of s){
        if(v === ' ') continue;
        else if(v === '(') arr.push(')');
        else if(v === '{') arr.push('}');
        else if(v === '[') arr.push(']');
        else if(arr.length === 0 || arr.pop() !== v) return false;
      }
      return arr.length === 0 ? true : false;
    }
    
    // let str = '( ) {}[()]';//true
    let str = '( ) {}[(}{)]';//false
    console.log(isValid(str));

    思路分析

      这题最巧妙之处在于arr.length === 0 || arr.pop() !== v,如果初级到中级的前端工程师,往往会写成else if(!arr.length) return false; else if(arr.pop() != v) return false; 而arr.pop()删除数组的最后一个元素,也对应一开始最左侧的元素值;

      我们假设传入的值为'( ) {}[()][',第一步就会往我们arr数组内添加')',然后第二步发现无法识别,就删除,因为 arr.length === 0 || arr.pop() !== v,这里的arr.pop() !== v就是判断右括号和左括号是否相符,比如传入')',此时删除的也是')',那么两者相等,就不会返回false。

    总结

      有时候我们看似最简单的代码往往可以优化的非常精妙,因此思想的养成非常重要,作为一名程序员,设计思想远比所会的框架api等重要的多!要做架构而非码农。

  • 相关阅读:
    sql语句技巧
    逻辑查询处理的步骤
    left join 和 left outer join的区别
    SQL 笛卡尔积
    SQL 分类
    显示数据库中的表
    数据库备份 恢复
    增删主键及修改表名
    Securing Data笔记
    System Monitoring之"文件系统"
  • 原文地址:https://www.cnblogs.com/zxd66666/p/13413137.html
Copyright © 2011-2022 走看看