一. 题目
-
题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
-
示例
二. 方法一: 栈
-
解题思路
- 循环遍历整个字符串
- 如果是左括号: “(”, “[” 或 “{”, 则插入到列表末尾
- 如果是右括号, 则判断列表末尾是否为与之匹配的左括号,
- 如果匹配, 则弹出最后一个元素; 如果不匹配, 则直接返回False
- 遍历到最后一个元素时, 如果列表为空, 则返回True; 否则返回False
-
解题代码
def isValid(self, s: str) -> bool: list1 = [] for ele in s: if ele == "(" or ele == "[" or ele == "{": list1.append(ele) # 重点: 运行到此处时, 当前元素肯定就是右括号,如果此时的列表为空, 则一定返回False # 如果不进行判断, 则在判断最后一个元素是否为与之匹配的左括号时, 会出现异常 if not list1: return False elif ele == ")": if list1[-1] == "(": list1.pop(-1) else: return False elif ele == "]": if list1[-1] == "[": list1.pop(-1) else: return False elif ele == "}": if list1[-1] == "{": list1.pop(-1) else: return False if not list1: return True else: return False
-
分析
时间复杂度: O(n)
空间复杂度: O(n)