Board logo

标题: [转载代码] [JS]分享一段代码,通过"栈"判断多重括号是否配对 [打印本页]

作者: 523066680    时间: 2017-9-6 17:30     标题: [JS]分享一段代码,通过"栈"判断多重括号是否配对

代码来自《learninng javascript data structures and algorithms》
  1. function matches(open, close)
  2. {
  3.     var opens = "([{",
  4.         closers = ")]}";
  5.     return opens.indexOf(open) == closers.indexOf(close);
  6. }
  7. function parenthesesChecker(symbols)
  8. {
  9.     var stack = new Stack();
  10.     var balanced = true;
  11.     var index = 0;
  12.     var symbol, top;
  13.     while (index < symbols.length && balanced)
  14.     {
  15.         symbol = symbols.charAt(index);
  16.         if (symbol == '(' || symbol == '[' || symbol == '{')
  17.         {
  18.             stack.push(symbol);
  19.         }
  20.         else
  21.         {
  22.             if (stack.isEmpty())
  23.             {
  24.                 balanced = false;
  25.             }
  26.             else
  27.             {
  28.                 top = stack.pop();
  29.                 if ( !matches(top, symbol) )
  30.                 {
  31.                     balanced = false;
  32.                 }
  33.             }
  34.         }
  35.         index++;
  36.     }
  37.     if (balanced && stack.isEmpty())
  38.     {
  39.         return true;
  40.     }
  41.    
  42.     return false;
  43. }
  44. console.log(parenthesesChecker('{{([][])}()}'));
  45. console.log(parenthesesChecker('[{()]'));
  46. function Stack()
  47. {
  48.     var items = [];
  49.     this.push = function(element) { items.push(element); };
  50.     this.pop = function() { return items.pop(); };
  51.     this.peek = function() { return items[items.length-1]; };
  52.     this.isEmpty = function() { return items.length == 0; };
  53.     this.size = function() { return items.length; };
  54.     this.clear = function() { items = []; };
  55.     this.print = function() { console.log(items.toString()); };
  56.     this.toString = function() { return items.toString(); };
  57. }
复制代码

作者: 523066680    时间: 2017-9-6 17:38

本帖最后由 523066680 于 2017-9-6 17:44 编辑

虽然可以直接通过 数组 push 和 pop 直接实现。
但 js 实现的这个"栈"还是有点意思。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2