recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Question d'entrevue frontale, solution

题目: Veuillez donner une fonction pour vérifier les paires d'accolades, parenthèses et crochets correspondantes

function isMatchingPair(str) {     
    // your code here 
}
 isMatchingPair('(str[x)xx]')  // return false 
 isMatchingPair('({[str]})')  // return true
習慣沉默習慣沉默2779 Il y a quelques jours641

répondre à tous(5)je répondrai

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

    répondre
    0
  • 某草草

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

    Correspondance du support de structure de pile.

    Maintenez une structure de pile, parcourez la chaîne et comparez-la avec le haut actuel de la pile. Si le haut de la pile est à gauche, le traverseur est à droite et les parenthèses sont du même type, elles sont éliminées. Les non-parenthèses sont ignorées.

    Après le parcours, si la longueur de la pile est 0, cela signifie qu'il y a une correspondance, sinon elle ne correspond pas.

    répondre
    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
        }

    répondre
    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

    répondre
    0
  • 黄舟

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

    Wow, puis-je demander où sont les questions de l'entretien ? Cela ne semble toujours pas facile

    répondre
    0
  • Annulerrépondre