码迷,mamicode.com
首页 > 其他好文 > 详细

栈——有效括号问题

时间:2020-05-20 15:51:23      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:size   space   顺序   堆栈   turn   是否有效   ffffff   相同   length   

问题:给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。

有效字符串需满足:

    1、左括号必须用相同类型的右括号闭合。
    2、左括号必须以正确的顺序闭合。
 3、空字符串可被认为是有效字符串。

解法一: 笨办法,分情况判断,代码比较冗长

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if s == "": # 单独处理s为空的情况
            return True
 
        stack = [] # 建立一个空的栈
 
        for item in s: # 遍历
            if len(stack) == 0: # 如果堆栈为空,直接入栈,跳过此次循环
               stack.append(item)
               continue
 
       # 下面分别判断了三种右括号的情况
 
            if item == ‘)‘:
                length = len(stack)
                if stack[length-1] == ‘(‘:
                    del stack[length-1]
                    continue
            if item == ‘]‘:
                length = len(stack)
                if stack[length-1] == ‘[‘:
                    del stack[length-1]
                    continue
            if item == ‘}‘:
                length = len(stack)
                if stack[length-1] == ‘{‘:
                    del stack[length-1]
                    continue
 
       # 如果item不是右括号,或者栈顶元素不是左括号,则压栈,继续循环
 
            stack.append(item)
        
     # 最后判断,stack是否为空
 
        if len(stack) != 0:
            return False
        return True


方案二:比较简洁的写法, 用map存储所有的 括号

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        bracket_map = {‘}‘:‘{‘,‘)‘:‘(‘,‘]‘:‘[‘}

        for ch in s:
            if ch not in bracket_map: # 如果ch不是右括号,则压栈
                stack.append(ch)
            elif not stack or bracket_map[ch]!=stack.pop(): # 如果ch是‘右括号’,那么栈顶元素一定可以找到与之对应的‘左括号’;如果没有,那么不合法
                return False
        return not stack # 最后,判断stack是否为空,这种写法比较简洁,只是代码不太直观


 

栈——有效括号问题

标签:size   space   顺序   堆栈   turn   是否有效   ffffff   相同   length   

原文地址:https://www.cnblogs.com/wl413911/p/12923951.html

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