leetcode刷题之 20. 有效的括号
-
题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。 -
示例 :
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true -
代码1:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
for i in range(len(s)):
s=s.replace("()",'')
s=s.replace("[]",'')
s=s.replace("{}",'')
return s == ""
# 执行用时 : 84 ms, 在Valid Parentheses的Python提交中击败了2.41% 的用户
# 内存消耗 : 11.8 MB, 在Valid Parentheses的Python提交中击败了2.24% 的用户
- 算法说明:
直接判断括号的匹配,然后删除,即判断是否存在“()”、“[ ]”、“{}”,如果存在直接删除,判断最后是否为空! - 代码2:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
s = list(s)
a = [0]
if s == []:
return True
if s[0] == ']' or s[0] == ')' or s[0] == '}':
return False
for i in range(len(s)):
if s[i] == '(' or s[i] == '[' or s[i] == '{':
a.append(s[i])
continue
if s[i] == ')' and a[-1] == '(':
a.pop()
continue
if s[i] == ')' and a[-1] != '(':
return False
if s[i] == ']' and a[-1] == '[':
a.pop()
continue
if s[i] == ']' and a[-1] != '[':
return False
if s[i] == '}' and a[-1] == '{':
a.pop()
continue
if s[i] == '}' and a[-1] != '{':
return False
return len(a) == 1
# 执行用时 : 36 ms, 在Valid Parentheses的Python提交中击败了16.72% 的用户
# 内存消耗 : 11.8 MB, 在Valid Parentheses的Python提交中击败了2.24% 的用户
- 算法说明:
利用栈的思想判断,( )、{ }、[ ]。左括号入栈,右括号出栈!最后判断栈是否为空!