[LeetCode] 20. 有效的括号 (栈)

思路:
首先用字典将三对括号存储,遍历字符串中每个字符,遇到左括号就入栈;遇到右括号就开始判断:是否与栈弹出的顶字符相同。
如果到最后栈被清空,说明全部匹配上了,为真。
class Solution(object):
def isValid(self, s):
stack=[] #设置一个列表,把该列表当做栈来使用即可
dic={'(':')','{':'}','[':']'} #使用字典存储括号
new_dic = {v : k for k, v in dic.items()} #由于不能直接从value查找到对应的key,采用了字典反转
for char in s:
if char in dic.keys(): #左括号就入栈
stack.append(char)
elif char in dic.values(): #有右括号的话就进行比较
if stack==[] or new_dic[char]!=stack.pop(): #分别对应'()]'以及'{]'两类情况
return False
else:
return False #非字典中的输入直接输出错误
return stack==[] #如果栈最后是空的,那么符合要求输出true;如果不是,则输出false, 使用一个条件表达式
mm=Solution()
print(mm.isValid('(([]){})'))
复杂度分析:
- 时间复杂度:O(n),因为我们一次只遍历给定的字符串中的一个字符并在栈上进行 O(1)的推入和弹出操作。
- 空间复杂度:O(n),当我们将所有的开括号都推到栈上时以及在最糟糕的情况下,我们最终要把所有括号推到栈上。例如
((((((((((。
另:
leetcode有一点坑的是,在下列情况:
if stack==[] or new_dic[char]!=stack.pop(): #分别对应'()]'以及'{]'两类情况
如果只考虑匹配写为 if new_dic[char]!=stack.pop():
在遇到'()]'时,会因为stack已经empty而无法继续pop出新元素而语法报错,但示例中并未给出'()]'此类例子。
遇到这种情况时,读者可能会反复对照题目给出的示例,觉得理应通过而百思不得其解。
大家coding时也要仔细,注意因为额外例子所导致的语法错误。
[LeetCode] 20. 有效的括号 (栈)的更多相关文章
- LeetCode 20. 有效的括号(Valid Parentheses)
20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...
- Java实现 LeetCode 20 有效的括号
20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...
- Leetcode 20 有效的括号valid-parentheses(栈)
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- [LeetCode] 20. 有效的括号
题目链接:https://leetcode-cn.com/problems/valid-parentheses/ 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串, ...
- Leetcode 20.有效的括号 By Python
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- LeetCode 20. 有效的括号(Valid Parentheses )
题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字 ...
- leetcode 20. 有效的括号 (python)
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认为是 ...
- LeetCode 20. 有效的括号( 括号配对 )
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- [LeetCode]20.有效的括号(Java)
原题地址: valid-parentheses 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类 ...
随机推荐
- Android - Error: "java.io.IOException: setDataSource failed.: status=0x80000000"
Error: "java.io.IOException: setDataSource failed.: status=0x80000000" 本文地址: http://blog.c ...
- tensorflow移植到ios
1.git clone到本地 git clone https://github.com/tensorflow/tensorflowxcode 2.compile static library 安装xc ...
- HDU 3397 Sequence operation 多标记线段树
/* 一开始维护了两个标记 开了两个数组 想的是 可能当前两种操作都要做 但是太复杂了 不好处理 其实 当前要做的标记可以只有一个 我们在Insert的时候 要打的标记是2即翻转区间: 1.如果原来是 ...
- iOS开发之KVC全解
一 KVC的基本概念 1.KVC是Key Value Coding的缩写,意思是键值编码. 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过g ...
- bzoj 3172 单词
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3937 Solved: 1912[Submit][Status ...
- [转] 理解 Dubbo SPI 扩展机制
写在前面 最近接触了 gRPC 体会到虽然众多 RPC 框架各有各的特点但是他们提供的特性和功能有很多的相似之处 , 这就说明他们面对同样的分布式系统带来的问题.从 2016 年左右开始接触到 dub ...
- poj1958-汉诺四塔问题(三种方法)
链接:http://poj.org/problem?id=1958 大意:汉诺塔升级版,四根柱子,n个盘子,求最少移动次数: 两种方法 递推or递归(当然还有思路3--打表) 思路1:递推(或者DP? ...
- java selenium启动火狐浏览器报错:Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: VISTA Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:14.666Z
Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: VISTA Build in ...
- 在Winform中怎么实现图片的旋转,比如说实现仪表盘功能,看代码吧,看太不懂的欢迎问
; //旋转的角度 //Timer定时器 private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false; ...
- Java数据类型转换1
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...