zoukankan      html  css  js  c++  java
  • 0020-leetcode算法实现之有效括号-valid-parentheses-python&golang实现

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

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。

    示例 1:

    输入:s = "()"
    输出:true
    示例 2:

    输入:s = "()[]{}"
    输出:true
    示例 3:

    输入:s = "(]"
    输出:false
    示例 4:

    输入:s = "([)]"
    输出:false
    示例 5:

    输入:s = "{[]}"
    输出:true

    提示:

    1 <= s.length <= 104
    s 仅由括号 '()[]{}' 组成

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses
    参考:

    python

    # 0020.有效括号
    
    class Solution:
        def validParentheses(self, s: str) -> bool:
            """
            哈希存储括号,key-右括号,val-左括号,栈存储左括号匹配
            思路:
            - 如果空或第一个元素即为右括号或者长度小于2,直接返回fasle
            - 遍历字符,栈非空且字符在字典中,
                - 如果栈顶元素与p中val匹配,弹栈
                - 否则,入栈
            - 遍历结束后,如果有效括号,肯定栈空,否则栈中有值,返回bool
            :param s:
            :return:
            """
            p = {
                "}": "{",
                "]": "[",
                ")": "("
            }
            stack = []
    
            if not s or s[0] in p or len(s) < 2:
                return False
    
            for str in s:
                if stack and str in p:
                    if stack[-1] == p[str]:
                        stack.pop()
                    else:
                        return False
                else:
                    stack.append(str)
            return not stack
    

    golang

    package main
    
    func isValid(s string) bool {
    	var n int = len(s)
    	if n%2 == 1 {
    		return false
    	}
    	var pairs = map[byte]byte{
    		')': '(',
    		']': '[',
    		'}': '{',
    	}
    	var stack = []byte{}
    	for i := 0; i < n; i++ {
    		if pairs[s[i]] > 0 { // 右括号时
    			if len(stack) == 0 || stack[len(stack)-1] != pairs[s[i]] { // stack空或者栈顶与pairs的key不匹配,fasle
    				return false
    			}
    			stack = stack[:len(stack)-1] // stack非空且匹配左右括号,弹栈
    		} else {
    			stack = append(stack, s[i]) // 左括号时,入栈
    		}
    	}
    }
    
    
  • 相关阅读:
    CCLayerColor 用法
    数据存储的常见方式
    rand() 和arc4random()到底应该如何取舍呢
    Cocos2d 中对图片的各种操作
    objectivec 解压缩zip
    设置IE浏览器默认的下载路径
    设置浏览器主页
    得到所有本机上安装的软件名
    取消快捷方式中的箭头图标
    查看本机服务
  • 原文地址:https://www.cnblogs.com/davis12/p/15526759.html
Copyright © 2011-2022 走看看