1.编辑器
我使用的是win10+vscode+leetcode+python3
环境配置参见我的博客:
链接
2.第二十题
(1)题目
英文:
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
中文:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
(2)解法(耗时:36ms,内存:13.7M)
使用栈入栈出的思想
class Solution:
def isValid(self, s: str) -> bool:
match = {')':'(', ']':'[', '}':'{'}
stack = []
for char in s:
if char not in match:
stack.append(char)
else:
if not stack or stack[-1]!=match[char]:
return False
stack.pop(-1)
return len(stack) == 0
注意:
1.pop可以指定index位被移出stack,当然也可以用del stack[-1]
。
2.因为程序中最开始是要判断char是否在match中的keys中的,如果不在则直接加到stack中,如果在,就比较前一个左括号是否与match[char]相同,相同则配对成功,并且要删除掉左括号,当所有的左括号都删完了还没有False,则输出True。