有效的括号
题目描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
题目链接:https://leetcode-cn.com/problems/valid-parentheses
思路:
栈的思想,把字符串中前面左半个括号放进栈里,然后向后扫描,发现与栈最后一个左括号配对的右括号就把栈的最后一个左括号pop掉,一直扫描到字符串尾,如果栈里没有元素说明该字符串是有效括号,反之为无效括号。
具体过程如下图:
代码:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if s == "":
return True
if len(s) % 2!=0:
return False
li = []
dic = {
'(':')',
'{':'}',
'[':']'
}
for i in s:
if li ==[]:
li.append(i)
continue
if i == dic.get(li[-1]):
li.pop()
else:
li.append(i)
if len(li) == 0:
return True
else:
return False
时间复杂度:
O(n),n为字符串长度
空间复杂度:
O(n),最坏的情况就是整个字符串都相互不匹配,栈里存放整个字符串长度。