LeetCode解题(第20题)
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合
2.左括号必须以正确的顺序闭合。
示例1:
输入:"()"
输出:true
示例2:
输入:"()[]{}"
输出:true
示例3:
输入:"(]"
输出:false
示例4:
输入:"([)]"
输出:false
示例5:
输入:"{[]}"
输出:“true”
解析:
这道题一开始的想法就是使用栈进行匹配,在Python中可以使用列表进行类似于栈的功能,但是也可以定义一个Stack类,在Python中实现栈的功能,所以这道题中我先定义Stack类,然后进行栈的匹配。在这道题中有几种特殊情况:1.空字符串:" " 2.没有左括号:")}]" 3.缺一部分括号:"{]}"(可能写的比较繁琐)
代码(Python3版本)
首先定义Stack类,实现栈的pop,push,peek等相关功能
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return len(self.items)==0
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
if not self.isEmpty():
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
之后使用栈,进行括号的匹配
S = Stack()
c=0
d=0
f=0
number = len(s)
if number>0:
for i in range(0,number):
if s[i] == "(" or s[i]=="{" or s[i] =="[":
x=s[i]
S.push(x)
c=c+1
f=f+1
if s[i] == ")" or s[i]=="}" or s[i] =="]":
d=d+1
if s[i] == ")" and S.peek()=="(":
c = c-1
S.pop()
d=d-1
if s[i] == "}" and S.peek()=="{":
c= c-1
S.pop()
d=d-1
if s[i] == "]" and S.peek()=="[":
c = c-1
S.pop()
d=d-1
if c ==0 and d==0 and f >0:
return True
else:
return False
else:
return True