• [Algorithm] Check for balanced parentheses using stack


    Algorithm or program to check for balanced parentheses in an expression using stack data structure.

    For example:

    [(1+2) * (3-4)] // true
    {[()]} // true
    {(}) // false
    {2*3) //false

    The idea to solve the problem is:

    • opening and closing parentheses should have the same number
    • last unclosed should be closed first!
    const closing = [')', ']', '}'];
    const opening = ['(', '[', '{'];
    const matching = {
      0: ['(', ')'],
      1: ['[', ']'],
      2: ['{', '}']
    };
    
    const contains = ary => target => ary.includes(target);
    const isOpening = contains(opening);
    const isClosing = contains(closing);
    
    function balanceParentheses (str) {
      let stack = [];
      const isEmpty = stack => stack.length === 0;
      const last = stack => stack[stack.length - 1];
      
      for (let char of str) {
        // if it is open char, push to the stack
        if (isOpening(char)) {
          stack.push(char);
        } 
        // if it is closing char
        else if (isClosing(char)) {
          // if stack is not empty
          if (!isEmpty(stack)) {
            // check last element should be the pair of closing element
            const indx = closing.indexOf(char);
            const [open, close] = matching[indx];
            // if it is, then pop the last element
            if (last(stack) === open) {
              stack.pop();
            } else {
              // otherwise, return false 
              return false;
            }
          } else {
            return false;
          }
        }
      }
      
      return isEmpty(stack);
    }
    
    console.log(balanceParentheses('{[()(){}]}')); // true
    console.log(balanceParentheses(')(')); // false
    console.log(balanceParentheses('({)}')); // false
    console.log(balanceParentheses('{2*3)')); // false
    console.log(balanceParentheses('[(1+2)*3-(1-9)]')); //true
  • 相关阅读:
    C# WPF 窗体传递消息
    WPF ProgressBar 样式
    WPF的TextBox以及PasswordBox显示水印文字
    Win8.1 Hyper-V 共享本机IP上网
    ASP.NET MVC入门-Startup 类:注册服务和使用中间件
    ASP.NET MVC入门-Program类:程序的入口
    Unity3d AssetBundle 资源加载与管理
    C#考核知识点总结
    数据结构与算法之美-字符串匹配(上)
    LeetCode-探索链表-综合问题
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10629764.html
Copyright © 2020-2023  润新知