• LeetCode Easy: 20. Valid Parentheses


    一、题目

    Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

    The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

    括号匹配问题。

    二、思路

    括号匹配问题,首先想到的就是栈的应用,将开括号压入栈,遇到闭括号就将栈顶元素弹出,看弹出的栈顶开括号是否与闭括号匹配,因为如果匹配正确的话,遇到的闭括号肯定与栈顶开括号匹配。

    三、代码

    写完自己的代码之后,网上搜了别人写的代码,还发现,我写的复杂,虽然思路是一样的,但是在python中,栈完全可以不用我这么写,代码如下,前面是简洁的写法,参考博客http://blog.csdn.net/xiaolewennofollow/article/details/45148577,后面是我的。

    def isValid(s):
        matchDict={'(':')','[':']','{':'}'}
        strLen=len(s)
        stackList=[]
        for i in range(strLen):
            if s[i] not in matchDict.keys() and len(stackList)==0:
                return False 
            elif s[i] in matchDict.keys():
                stackList.append(s[i])
            elif s[i]==matchDict[stackList[-1]]:
                stackList.pop()
            else: return False
        if len(stackList)==0:
            return True
        else: return False
    

      

    class StackUnderflow(ValueError): #栈下溢(空栈访问)
        pass
    
    class SStack(): #基于顺序表技术实现的栈类
        def __init__(self):    #用list对象存储栈中元素
            self._elems = []    #所有栈操作都映射到list操作
        def is_empty(self):
            return self._elems == []
        def top(self):
            if self._elems==[]:
                raise StackUnderflow("in SStack.top()")
            return self._elems[-1]
        def push(self,elem):
            self._elems.append(elem)
        def pop(self):
            if self._elems==[]:
                raise StackUnderflow("in SStack.pop()")
            return self._elems.pop()
    
    class Solution:
        def isValid(self, s):
            """
            :type s: str
            :rtype: bool
            """
            """括号配对检查函数,text是被检查的正文串"""
            parens = "()[]{}"
            open_parens = "([{"
            opposite = {")": "(", "]": "[", "}": "{"}
    
            def parenttheses(s):
                i,text_len = 0,len(s)  #初始化
                while True:
                    while i<text_len and s[i] not in parens:
                        i+=1
                    if i >= text_len:
                        return
                    yield s[i],i
                    i+=1
    
            st = SStack()
            for pr,i in parenttheses(s):
                if pr in open_parens:
                    st.push(pr)
                else:
                    if st.is_empty():
                        return False
                    else:
                        temp = st.pop()
                        if temp !=opposite[pr]:
                            return False           
            if st.is_empty():
                return True
            else:
                return False
    既然无论如何时间都会过去,为什么不选择做些有意义的事情呢
  • 相关阅读:
    十分钟抢票千余张,黄牛的抢票软件是何原理
    常见乱码解决
    如何给程序中的变量起个好名字
    jsp自定义标签
    request.getHeader("Referer")理解【转载】
    mybatis学习笔记1--HelloMybatis
    Spring学习笔记14---bean的使用
    Spring学习笔记13--Autowire(自动装配)
    Spring 学习笔记12--AOP讲解
    Spring学习笔记11--Spring 自动装配 Bean
  • 原文地址:https://www.cnblogs.com/xiaodongsuibi/p/8607898.html
Copyright © 2020-2023  润新知