目标:补全昨日任务 + 推进视频学习
一、LeetCode第20题
-
题目:力扣第20题《有效的括号》(题目链接)。
-
def is_valid(s: str) -> bool: # 定义函数is_valid,接收字符串s作为参数,返回值类型为bool # 函数功能:判断括号字符串s是否有效 stack=[] # 初始化一个空列表stack,模拟栈结构 bracket_map={')':'(', '}':'{', ']':'['} #创建字典,{'键':'值'} for char in s: # 遍历输入字符串s中的每一个字符char if char in bracket_map.values(): # 判断当前字符char是否属于左括号(即是否在bracket_map的值中) # 因为bracket_map.values()包含'(', '{', '['三种左括号 stack.append(char) # 如果是左括号,将其压入栈stack中 else: # 如果当前字符char不是左括号,则必然是右括号(题目限定只含六种括号) if not stack or stack.pop()!=bracket_map[char]: # 检查两种不匹配情况: # 1. not stack:栈为空,说明没有左括号可匹配当前右括号 # 2. stack.pop() != bracket_map[char]:弹出栈顶元素(最近的左括号),检查是否与当前右括号匹配 # 例如:当前右括号是')',对应的左括号应为'(', 若栈顶不是'('则不匹配 return False return not stack # 遍历完所有字符后,检查栈是否为空: # 如果栈为空(not stack为True),说明所有左括号都被正确匹配,返回True # 如果栈不为空,说明有未匹配的左括号,返回False s=input() print(is_valid(s))
核心思路:
-
定义一个栈,遍历字符串s,遇到左括号就进栈,遇到右括号就弹出栈顶元素,看是否匹配;如果不匹配或者栈空则返回False,只有当最后栈为空才返回True。
二、视频学习
李宏毅机器学习系列课程1、2