LeetCode 有效的括号

  给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

  有效字符串需满足:

  左括号必须用相同类型的右括号闭合。

  左括号必须以正确的顺序闭合。

  注意空字符串可被认为是有效字符串。

  示例 1:

  输入: "()"

  输出: true

  示例 2:

  输入: "()[]{}"

  输出: true

  示例 3:

  输入: "(]"

  输出: false

  示例 4:

  输入: "([)]"

  输出: false

  示例 5:

  输入: "{[]}"

  输出: true

  解题思路

  思路:栈;

  对括号进行映射,右括号为键,左括号为值;

  如果遇到左括号,直接将其入栈。等待后面匹配处理;

  如果遇到右括号,检查栈顶的元素。若是同类型则弹出继续处理接下的部分。否则,直接返回 False;

  如果最终遍历完成后,栈中还有元素,同样返回 False。

  代码实现郑州妇科医院 http://www.zzkdfk120.com/

  class Solution:

  def isValid(self, s: str) -> bool:

  '''判断是否是有效的括号

  Args:

  str: 包含括号的字符串

  Returns:

  返回判断的结果,满足条件:

  1. 左括号必须用相同的类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

  空字符串可以被认为是有效的字符串

  返回类型为布尔型

  '''

  # 以栈形式存储左括号

  stack = []

  # 以右括号当成键映射对应类型的左括号

  prths_mapping = {'}': '{', ']': '[', ')': '('}

  # 遍历字符串,遇左括号则进行入栈

  for ch in s:

  # 对字符进行判断,是否为右括号

  if ch in prths_mapping:

  # 为右括号的情况下,判断 stack 栈顶是否是同类型的左括号

  # pop 出栈顶的字符

  # 若 stack 为空,用 '?' 进行标记

  pop_prth = stack.pop() if stack else '?'

  # 如果左右括号不成对,直接返回 False

  if prths_mapping[ch] != pop_prth:

  return False

  else: # 左括号入栈

  stack.append(ch)

  # stack 最终为空,则表示为有效

  return not stack

posted @ 2020-01-15 11:31  网管布吉岛  阅读(148)  评论(0编辑  收藏  举报