给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:输入: "()"输出: true
示例 2:输入: "()[]{}"输出: true
示例 3:输入: "(]"输出: false
示例 4:输入: "([)]"输出: false
示例 5:输入: "{[]}"输出: true
解答:
思路初始化栈 S。
一次处理表达式的每个括号。
如果遇到开括号,我们只需将其推到栈上即可。这意味着我们将稍后处理它,让我们简单地转到前面的 子表达式。
如果我们遇到一个闭括号,那么我们检查栈顶的元素。如果栈顶的元素是一个 相同类型的 左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
如果到最后我们剩下的栈中仍然有元素,那么这意味着表达式无效。
代码:class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
# # 在leetcode-cn.com 中以下这行代码无法通过
if len(s) % 2 == 1 or len(s) == 0:
return True
mapping = {")": "(", "}": "{", "]": "["}
stack = []
for char in s:
if char in mapping:
top_element = stack.pop() if stack else ''
if mapping[char] != top_element:
return False
else:
stack.append(char)
return not stack
if len(s) % 2 == 1 or len(s) == 0在leetcode-cn.com 中以下这行代码无法通过。解决办法如下class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s) == 0:
return True
if len(s) % 2 == 1:
return False
mapping = {")": "(", "}": "{", "]": "["}
stack = []
for char in s:
if char in mapping:
top_element = stack.pop() if stack else ''
if mapping[char] != top_element:
return False
else:
stack.append(char)
return not stack