[LeetCode] 20. 有效的括号 (栈)
2019-02-20 00:46:05来源:博客园 阅读 ()
思路:
首先用字典将三对括号存储,遍历字符串中每个字符,遇到左括号就入栈;遇到右括号就开始判断:是否与栈弹出的顶字符相同。
如果到最后栈被清空,说明全部匹配上了,为真。
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时也要仔细,注意因为额外例子所导致的语法错误。
原文链接:https://www.cnblogs.com/nicetoseeyou/p/10396533.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python爬取盘搜的有效链接 2019-07-24
- LeetCode链表简单题 2019-07-24
- 20190305-leetcode题目有效的括号 2019-03-06
- python(leetcode)-14最长公共前缀 2019-02-27
- python(leetcode)-重复元素算法题 2019-02-25
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash