题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
解题思路
- 数据结构:栈,从外部到内部 解决带有递归结构的问题。
- 步骤:
1.初始化空栈stack,
2.遍历字符串,如果遇到的是左括号,则入栈
3.如果遇到右括号,检查栈顶元素,如果栈顶元素和当前的右括号是同类型的左括号,则将栈顶元素弹出,继续下一步处理。
4.最后判断栈中元素是否为空,如果不为空,则意味着表达式无效。
import sys
class Solution(object):
def isValid(s):
"""
:param s: str
:return: bool
"""
length = len(s)
stack = []
for i in range(0, length):
if s[i] == '(' or s[i] == '{' or s[i] == '[':
stack.append(s[i]) #入栈
else:
if len(stack) != 0:
tmp = stack.pop()
if s[i] == ')' and tmp != '(':
return False
if s[i] == '}' and tmp != '{':
return False
if s[i] == ']' and tmp != '[':
return False
#遍历完字符串后,如果栈中还有元素,则该表达式是无效的
if len(stack) != 0:
return False
return True
#测试
if __name__ == '__main__':
s = str(sys.stdin.readline().strip())
print(isValid(s))
- 涉及到的python知识拓展
(1) range方法:一般用在for循环中,range(start, end, step),表示循环从start开始,到end结束,包括start,但不包括end,每一步长是step,默认为1。例如range(0,5)相当于range(5),相当于[0,1,2,3,4].
(2) pop方法:python List中的pop()通常用于移除List中的一个元素(默认为最后一个元素),并返回该元素的值