题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足以下要求:
1,左括号必须用相同类型的右括号闭合。
2,左括号必须以正确的顺序闭合。
3,注意空字符串可被认为是有效字符串。
例如,"{[{()}]()}"就是一个闭合的有效字符串。
实现思路
这里我们运用 栈
里面 先进后出
的思想来处理问题。
- 遍历字符串中的每一个括号
- 定义一个空列表,如果遇到左括号,就存储到列表中
- 如果遇到右括号,判断列表是否为空,不为空就弹出列表中最后一个左括号,并判断右括号和弹出的左括号是否匹配,不匹配则返回 False
- 如果遇到右括号,且列表为空,那么也就表示列表中没有匹配的括号,则直接返回 False
- 遍历结束,最后再判断列表是否为空,不为空则表示左/右括号有多余的,返回 False ; 为空则表示是闭合的有效字符串,返回 True
代码实现
def demo(s):
stack = []
for i in s:
if i == "(" or i == "[" or i == "{":
stack.append(i)
elif i == ")":
if len(stack) == 0 or stack.pop() != "(":
return False
elif i == "]":
if len(stack) == 0 or stack.pop() != "[":
return False
elif i == "}":
if len(stack) == 0 or stack.pop() != "{":
return False
return True if len(stack) == 0 else False
res1 = demo("{[{()}]()}")
print(res1 == True)
res2 = demo("{}())))[]")
print(res2 == False)
res3 = demo("")
print(res3 == True)
更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)