LeetCode 020 Python&Go版本

点击上方“Python学习开发”,选择“加为星标

第一时间关注Python技术干货!


题目名称有效的括号

题目要求

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

有效字符串需满足:

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

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

解答思路

要判断括号是否正规,我们知道在程序中括号有三种()[]{},如果是正确使用应该满足以下条件:
1.括号都是成对出现,先是括号左边出现然后是右边。
2.如果括号里面有括号,必须是成对的才算合法。
3.如果当前是右括号,那么前面一定存在左括号。
代码角度来说的话,我们可以先定义一个字典,字典的键是括号的一部分,值是另一部分,剩下的看代码就懂了,也有解释。

代码演示

Python Version

"""
左括号的话就压栈,右括号如果匹配到之前左括号就出栈。
最后如果栈的长度为0,则表示匹配成功
"""
class Solution:
    def isValid(self, s: str) -> bool:

        bracket_dic= {")": "(", "}": "{", "]": "["}
        stack = []
        for item in s:
            if item in bracket_dic:
                value = stack.pop() if stack else ""
                #如果找不到值,说明之前不存在括号的左边,所以直接可以结束了。
                if bracket_dic[item]!=value:
                    return False
            else:
                stack.append(item)    

        if not stack:
            return True



if __name__ == "__main__":
    input_str = "(([]})"
    s = Solution()
    print(s.isValid(input_str))        

Go Version

package main
import (
    "fmt"
)

func isValid(s string) bool {
    bracket_dic:=map[byte]byte{')': '(', '}': '{', ']': '['}
    var stack []byte
    for _,value:= range s{
        l_s:=len(stack)
        if l_s>0 {
        if v,ok:=bracket_dic[byte(value)];ok{
            top_element:=stack[l_s-1]
            if v==top_element{
                 stack = stack[:l_s-1]
                 continue
            }
        }
      }
        stack=append(stack,byte(value))


    }
    return len(stack)==0

}

func main() {

     fmt.Println(isValid("({})"))
}

推荐阅读

Python 爬虫面试题 170 道:2019 版

LeetCode-001  Python&Go版本

LeetCode 007 Python&Go版本

LeetCode 009 Python&Go版本

LeetCode 014 Python&Go版本

添加微信[gopython3].回复:回复Go或者Python加对应技术群。

你可能感兴趣的:(LeetCode 020 Python&Go版本)