题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
解答
class Solution:
def isValid(self, s: str) -> bool:
stack = ["?"]
# 不是空栈的原因是:
# 如果第一个括号就是反括号,如 "}()[()]"
# { 是不会存入栈的,此时为空栈,stack.pop()就会报错。
# d中也要有"?"的对应值,不然 d[stack.pop()]会报错
d = {"(": ")", "[": "]", "{": "}", "?": "?"}
for i in s:
if i in d:
stack.append(i)
elif d[stack.pop()] != i:
return False
return True if len(stack) == 1 else False
笔记
首先搞清楚可迭代(iterable)和迭代器(iterator)
迭代器都是可迭代的,但可迭代的不一定是迭代器;
可用for ... in循环的都是可迭代的,可用next( )遍历的才是迭代器;
next( )是单向的,一次只获取一个元素,获取到最后一个元素后停止
# dic 是一个字典,有key和value
# 下面这段
if i in dic:
# dic 迭代的是key的值
# 如果想迭代value的值:
for value in d.itervalues()
# 如果想迭代key和value的值:
for k, v in d.iteritems()
list想对索引和元素迭代
for index, value in enumerate(['A', 'B', 'C'])