leetcode第二十题 —— 有效的括号
2019-11-23 本文已影响0人
不分享的知识毫无意义
1.题目
原题:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
例子:
输入: "()[]{}"
输出: true
解释:是一一匹配的对应关系
2.解析
这道题算是一道休闲题,没有特别复杂的情况,由于是两个字符串的匹配,可以考虑用堆栈的数据结构。
在做题之前先把可能出现的情况考虑清楚,再下手:
- 空字符串,题目说认定为true,那么如果是空直接返回True
- 输入字符串是单数,单数肯定无法满足一一匹配,直接返回false
- 输入字符串是偶数,一种是以)等开头的,肯定无法匹配,直接返回false,一种是以(等开头需要判断。
这道题有几个知识点需要提前说明一下: - 字符串的操作,insert/pop/append可以模拟除堆栈和队列的数据结构
- 字典的遍历,直接写if i in dict1,判断的是i是否在字典的key里
3.python代码
class Solution:
def isValid(self, s):
charcter = {'(': ')', '{': '}', '[': ']'}
if len(s) % 2 != 0:
return False
if not s:
return True
stack = []
for i in s:
if i in charcter:
stack.append(i)
else:
if not stack or i != charcter[stack[-1]]:
return False
stack.pop()
return len(stack) == 0