前言

  【典型例子】

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

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

 

代码

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等重要的多!要做架构而非码农。

 

posted on 2020-08-01 03:27  Tom最好的朋友是Jerry  阅读(735)  评论(0编辑  收藏  举报