suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Eine Frage und Lösung für ein Front-End-Interview

题目: Bitte geben Sie eine Funktion an, um passende Klammer-, Klammer- und Klammerpaare zu überprüfen

function isMatchingPair(str) {     
    // your code here 
}
 isMatchingPair('(str[x)xx]')  // return false 
 isMatchingPair('({[str]})')  // return true
習慣沉默習慣沉默2779 Tage vor642

Antworte allen(5)Ich werde antworten

  • 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;
    }

    Antwort
    0
  • 某草草

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

    栈结构括号匹配。

    维护一个栈结构,遍历字符串,与当前栈顶比较,若栈顶为左,遍历者为右,并且同一型号括号,则消去。非括号略过。

    遍历完后若栈长度为0则说明匹配,否则不匹配。

    Antwort
    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
        }

    Antwort
    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

    Antwort
    0
  • 黄舟

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

    哇 能问下是哪里的面试题吗 感觉还是不容易的

    Antwort
    0
  • StornierenAntwort