题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
解题思想:模仿栈的操作,遇到左括号入栈,遇到右括号检测栈顶元素是否与该右括号匹配。
基于Python
class Solution:
def isValid(self, s):
stack = []
match = {'}':'{',']':'[',')':'('}
match_left,match_right = match.values(),match.keys()
for i in s:
if i in match_right:
if stack and stack[-1] == match[i]:
stack.pop()
else:
return False
elif i in match_left:
stack.append(i)
return not stack
参观了一下LeetCode上大神们的解题思路,发现一个极简版本:附作者及出处
class Solution:
def isValid(self, s: str) -> bool:
dic = {'{': '}', '[': ']', '(': ')', '?': '?'}
stack = ['?']
for c in s:
if c in dic: stack.append(c)
elif dic[stack.pop()] != c: return False
return len(stack) == 1
作者:jyd
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。