有效的括号序列——算法面试刷题4(for google),考察stack

给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。

括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]" 则是无效的括号。

样例

样例 1:

输入:"([)]"
输出:False

样例 2:

输入:"()[]{}"
输出:True

挑战

O(n)的时间,n 为括号的个数。

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution:
    """
    @param s: A string
    @return: whether the string is a valid parentheses
    """
    def isValidParentheses(self, s):
        # write your code here
        match_par = {"(": ")", "[": "]", "{": "}"}
        l_par = set(match_par.keys())
        r_par = set(match_par.values())
        stack = []
        for c in s:
            if c in l_par:
                stack.append(c)
            elif c in r_par:
                if not stack or match_par[stack.pop()] != c:
                    return False
            else:
                pass
        return len(stack) == 0

 参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution(object):
    '''
    题意:输入一个只包含括号的字符串,判断括号是否匹配
    模拟堆栈,读到左括号压栈,读到右括号判断栈顶括号是否匹配
    '''
    def isValidParentheses(self, s):
        stack = []
        for ch in s:
            # 压栈
            if ch == '{' or ch == '[' or ch == '(':
                stack.append(ch)
            else:
                # 栈需非空
                if not stack:
                    return False
                # 判断栈顶是否匹配
                if ch == ']' and stack[-1] != '[' or ch == ')' and stack[-1] != '(' or ch == '}' and stack[-1] != '{':
                    return False
                # 弹栈
                stack.pop()
        return not stack

 值得学习的地方:

return not stack

posted @   bonelee  阅读(496)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2018-04-20 DNS 负载均衡
2017-04-20 美国诚实签经验——我们准备了XX万的存款,这足以应付我预算表中涉及的所有开支,如果有意外情况我们的资金不足以应付,我们双方的父母也会支援我们,绝对不会占用美国的任何福利
2017-04-20 美国诚实签经验——户口本!!!
2017-04-20 美国诚实签经验——是不是户籍和常住作业地在一起?是不是有居住证?明白居住证信息吗?英语超卓,应变能力强,有幽默感 10分
2017-04-20 美国诚实签经验——中英文行程单、往返机票、用英语面试的申请者通过率>用中文面试的申请者的通过率、一直保持着微笑,看上去很自信,也很诚恳、户口簿带上最好
2017-04-20 重新定义数据库历史的时刻——时间序列数据库Schwartz认为InfluxDB最有前途,Elasticsearch也不错
点击右上角即可分享
微信分享提示