题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
solution_1
思路:利用栈。遍历字符串,遇到左括号,则压入栈,遇到右括号,则栈顶元素弹出与该右括号比较,如果不匹配则返回False,否则继续遍历。遍历结束后如果栈为空,则说明字符串有效。
结果:执行用时:16 ms
排名:战胜97.61%
代码如下
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
i = 0
brac_list = [] # 栈
left_brac = '([{' # 左括号
brackets = {')':'(',']':'[','}':'{'} # 右括号对应的左括号
while i < len(s):
if s[i] in left_brac: # 左括号压入栈
brac_list.append(s[i])
else: # 遇到右括号则弹出栈顶元素并进行配对
if len(brac_list) == 0 or brac_list.pop() != brackets[s[i]]:
return False
i += 1
return len(brac_list) == 0 # 有效字符串遍历完之后栈应为空