Python旧版课程库
Python第 10 期 - 数据结构查看课程总览

298 括号的匹配1

298 括号的匹配1

  1. 问题描述
  2. 辅助栈法解决括号匹配
  3. 算法流程

问题描述

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足:
  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

辅助栈法解决括号匹配

栈先入后出的特点恰好与本题括号排序特点一致,将输入的字符串挨个输入栈中,如果是左括号直接入栈,如果是右括号则将对应栈顶的左括号出栈,那么遍历完所有括号后栈仍旧为空。
使用哈希表构建左右括号对应关系:键为右括号,值为左括号;这样查询括号是否匹配只需 O(1)时间复杂度;建立栈,遍历字符串并按照算法流程一一判断

算法流程

  1. 遍历字符串
  2. 对单个字符,如果是左括号则入栈push
  3. 对单个字符,如果是右括号则进行匹配,判断栈顶字符是否和当前字符匹配,如果不匹配则提前结束;如果匹配,则将此栈顶字符出栈
  4. 遍历结束后判断栈是否为空,如有剩余字符则返回false
下面是案例:

小结

  • 掌握括号匹配的解法
  • 掌握辅助栈的用法
  • 习题

    1. 详细描述算法的流程
    2. 体会辅助栈在问题中所起的作用