目录
问题
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解题思路
分析:这也是一道比较简单的题目,具体就类似堆栈:在入栈前判断栈中最后一个元素和当前元素是否配对,配对就弹出栈中元素,循环遍历一遍字符串后,如果栈不为空,则字符串无效。
注意:
1)就是如果字符串长度是奇数,则必然无效。
2)配对的括号,建立字典时的键值关系。具体参考代码:
python具体实现
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
sLen = len(s)
bracketStack = []
bracketDict = {')':'(','}':'{',']':'['}
flag = True
if sLen%2 ==1:
flag = False
else:
for i in range(sLen):
if len(bracketStack) <1:
bracketStack.append(s[i])
elif s[i] in ['(','{','[']:
bracketStack.append(s[i])
elif bracketStack[-1]==bracketDict[s[i]]:
bracketStack = bracketStack[:-1]
if bracketStack != []:
flag = False
return flag
题外记
对堆栈的操作,太少,知道其含义,但是出入栈的操作,不是用的栈的操作方式,实现的栈的含义。