问题描述
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
例如:
即左右括号必须是闭合的。
解题思路
使用栈结构来处理这个问题非常简单。
我们从左到右依次扫描字符串的每一个字符,如果是([{左括号就入栈,如果是)]}右括号就从栈里弹出栈顶的元素,然后匹配该字符和栈顶元素是否是成对的。
例如扫描到字符(,然后栈顶元素是),则成对,否则不成对则返回False
扫描完字符串,如果栈里没有元素则说明括号都是成对的,匹配成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution: def isValid(self, s: str) -> bool: if len(s) % 2 != 0: return False
_stack = [] _map = { ")": "(", "]": "[", "}": "{" } for _char in list(s): if _char in "([{": _stack.append(_char) else: if _stack: if _char in _map: _top = _stack.pop() if _map[_char] != _top: return False else: return False return len(_stack) == 0
|
原链接
https://leetcode.cn/problems/valid-parentheses/