题目
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
**输入:**s = "()"
**输出:**true
示例 2:
**输入:**s = "()[]{}"
**输出:**true
示例 3:
**输入:**s = "(]"
**输出:**false
示例 4:
**输入:**s = "([])"
**输出:**true
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
思路
先建立一个栈stack,用来存取从s中读取的字符串
遍历s中所有的字符串,需要三个分支来对其进行分类:
当前元素是'(','{','['中的一个时,这时候就向stack中添加一个该元素对应的另一个符号,比如该元素时'('就添加进来')'这样一个,对应添加,对于后面的判断会更方便
当stack是空的时候或者该元素不等于stack的最后一个元素时,就说明无法完成配对,即可返回False结束即可
不满足以上两个条件时,那就说明该元素是')',']','}'中的一个,即弹出stack最后一个元素即可
代码
python
class Solution:
def isValid(self, s: str) -> bool:
if len(s) == 0 or len(s) ==1:
return False
stack = []
for i in s:
if i == '(':
stack.append(')')
elif i == '{':
stack.append('}')
elif i == '[':
stack.append(']')
elif len(stack)==0 or stack[-1]!=i :
return False
else:
stack.pop()
if len(stack) == 0:
return True
else:
return False