码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-04-20 13:12:28      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:rip   pop   amp   als   obj   表示   lse   堆栈   ret   

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

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

样例

样例 1:

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

样例 2:

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

挑战

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

我的代码:

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

 参考代码:

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

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

标签:rip   pop   amp   als   obj   表示   lse   堆栈   ret   

原文地址:https://www.cnblogs.com/bonelee/p/10740347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!