search

Home  >  Q&A  >  body text

javascript - A front-end interview question, solution

题目: Please give a function to check matching pairs of braces, parenthese and brackets

function isMatchingPair(str) {     
    // your code here 
}
 isMatchingPair('(str[x)xx]')  // return false 
 isMatchingPair('({[str]})')  // return true
習慣沉默習慣沉默2797 days ago653

reply all(5)I'll reply

  • ringa_lee

    ringa_lee2017-05-19 10:20:37

    function isMatchingPair(str) {     
        var s = [];
        var l = ['(','[','{'];
        var r = [')',']','}'];
        for(var i = 0; i< str.length; i++){
            if(l.includes(str[i]))
                s.push(r[l.indexOf(str[i])]);
            if(r.includes(str[i]))
                if(s.pop()!=str[i]){return false;}
        }
        return s.length?false:true;
    }

    reply
    0
  • 某草草

    某草草2017-05-19 10:20:37

    Stack structure bracket matching.

    Maintain a stack structure, traverse the string, and compare it with the current top of the stack. If the top of the stack is left, the traverser is right, and the brackets are of the same type, they are eliminated. Non-parentheses are ignored.

    After traversing, if the stack length is 0, it means there is a match, otherwise it does not match.

    reply
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:20:37

     function isMatchingPair(str){
          var left = /\(|\{|\[/,right = /\)|\}|\]/,map={'(':')','{':'}','[':']'}
          var stack = []
          var ret = true
          str.split('').forEach(function(e){
            if(left.test(e)){
              stack.push(e)
            }else if(right.test(e)){
              if(e === map[stack[stack.length - 1]]){
                stack.pop()
              }else{
                ret = false
              }
            }
          })
          return ret && !stack.length
        }

    reply
    0
  • 黄舟

    黄舟2017-05-19 10:20:37

    // 主要考察的数组的栈操作
    function isMatchingPair(str) {    
          let len = str.length; 
          var arr1 = []; // 左括号形成的数组
          let arr2 = []; // 右括号形成的数组
          let obj = {
            '[': ']',
            '(': ')',
            '{': '}'
          };
          const reg1 = /[\[\(\{]+/gi;
          const reg2 = /[\]\)\}]+/gi;
          for (let i = 0; i < len; i++) {
            if (reg1.test(str.charAt(i))) {
              arr1.push(str.charAt(i))
            } else if (reg2.test(str.charAt(i))) {
              arr2.push(str.charAt(i))
            }
          }
          console.log(arr1, arr2);
          if (arr1.length != arr2.length) {
            console.log(false);
            return false;
          }
    
          for (let i = 0, len = arr1.length; i < len; i++) {
            console.log(i, arr1, arr2);
            if (obj[arr1.shift()] != arr2.pop()) {
              console.log(false);
              return false;
            }
          }
          console.log(true);
          return true;
        }
    
        isMatchingPair('(str[x)xx]');  // false 
        isMatchingPair('({[str]})');  // true
        isMatchingPair('((((str[[[x))xx])))');  // false 
        isMatchingPair('(({{[[str]]}}))');  // true

    reply
    0
  • 黄舟

    黄舟2017-05-19 10:20:37

    Wow, can you ask where the interview questions are? It still feels not easy

    reply
    0
  • Cancelreply