题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
代码:
class Solution(object):
def isValid(self, s):
left_str = []
for i in range(len(s)):
if s[i] == '(' or s[i] == '[' or s[i] == '{':
left_str.append(s[i])
else:
if len(left_str) == 0:
return False
else:
temp = left_str[-1]
if s[i] == ')' and temp == '(':
left_str.pop()
elif s[i] == ']' and temp == '[':
left_str.pop()
elif s[i] == '}' and temp == '{':
left_str.pop()
else:
return False
if len(left_str) == 0:
return True
else:
return False
看到这道题首先想到的用栈,左括号进栈,遇到右括号就出栈,判断一下是否成功匹配。不成功直接返回False。
除了上面的直接不匹配,还要注意几种非法情况:
1.左括号多了
2.左括号少了即右括号多了
以上代码提交是没问题