给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例一
输入: “([)]”
输出: false
示例二
输入: “{[]}”
输出: true
思路:和之前的删除外层括号很相似,左括号入栈,右括号对当前栈做出栈操作,字符串元素结束,栈是否为空,若为空,则说明字符串有效。但是需要注意的是现在括号有三种类型,无论类型只要是左边就入栈,一直到出现右括号时,判断此时栈是否有元素 同时 栈顶元素是否是与之匹配的左括号,在栈不为空的情况且匹配的情况,左括号弹出,否则,则说明序列无效,(此时1.栈可能为空,也可能是2.不为空的不与当前右括号匹配的序列),又因为通过栈为空代表序列有效,为防止第一种栈空误判为有效,把当前右括号入栈
程序如下:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
t = [];
for i in range(len(s)):
if s[i] =='(' or s[i] =='[' or s[i] =='{':
t.append(s[i]);
if s[i] == ')':
if len(t)!=0 and t[-1] == '(':
t.pop()
else:
t.append(s[i]);
break
if s[i] == ']':
if len(t)!=0 and t[-1] == '[':
t.pop()
else:
t.append(s[i]);
break
if s[i] =='}':
if len(t)!=0 and t[-1] == '{':
t.pop()
else:
t.append(s[i]);
break
return len(t)==0
程序写的很差啊 内存消耗太大 用时较长 明天看题解再继续修改