[JS][算法]通过"栈"判断多重分级括号是否配对

头像
523066680
Administrator
Administrator
帖子: 325
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 29 times
Been thanked: 21 times
联系:

[JS][算法]通过"栈"判断多重分级括号是否配对

帖子 #1 523066680 » 2017年09月06日 16:47

Code: [全选] [展开/收缩] [Download] (Untitled.js)
  1. function matches(open, close)
  2. {
  3.     var opens = "([{",
  4.         closers = ")]}";
  5.     return opens.indexOf(open) == closers.indexOf(close);
  6. }
  7.  
  8. function parenthesesChecker(symbols)
  9. {
  10.     var stack = new Stack();
  11.     var balanced = true;
  12.     var index = 0;
  13.     var symbol, top;
  14.  
  15.     while (index < symbols.length && balanced)
  16.     {
  17.         symbol = symbols.charAt(index);
  18.         if (symbol == '(' || symbol == '[' || symbol == '{')
  19.         {
  20.             stack.push(symbol);
  21.         }
  22.         else
  23.         {
  24.             if (stack.isEmpty())
  25.             {
  26.                 balanced = false;
  27.             }
  28.             else
  29.             {
  30.                 top = stack.pop();
  31.                 if ( !matches(top, symbol) )
  32.                 {
  33.                     balanced = false;
  34.                 }
  35.             }
  36.         }
  37.  
  38.         index++;
  39.     }
  40.  
  41.     if (balanced && stack.isEmpty())
  42.     {
  43.         return true;
  44.     }
  45.    
  46.     return false;
  47. }
  48.  
  49. console.log(parenthesesChecker('{{([][])}()}'));
  50. console.log(parenthesesChecker('[{()]'));
  51.  
  52.  
  53. function Stack()
  54. {
  55.     var items = [];
  56.  
  57.     this.push = function(element) { items.push(element); };
  58.  
  59.     this.pop = function() { return items.pop(); };
  60.  
  61.     this.peek = function() { return items[items.length-1]; };
  62.  
  63.     this.isEmpty = function() { return items.length == 0; };
  64.  
  65.     this.size = function() { return items.length; };
  66.  
  67.     this.clear = function() { items = []; };
  68.  
  69.     this.print = function() { console.log(items.toString()); };
  70.  
  71.     this.toString = function() { return items.toString(); };
  72. }

回到 “JavaScript”

在线用户

用户浏览此论坛: 没有注册用户 和 1 访客