前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode之有效的括号

Leetcode之有效的括号

作者头像
润森
发布2019-09-17 11:46:40
4340
发布2019-09-17 11:46:40
举报
文章被收录于专栏:毛利学Python毛利学Python

点击上方 毛利学python,选择置顶或星标

第一时间送达Python 技术干货!

我经常逛leetcode,决定每周更新几道leetcode的题目

  • 参考极客时间前facebook超哥和前google王争

想购买的找我拿海报

  • leetcode大神题解

有效的括号

leetcode 第20题 判断有效的括号

我想到的左右消除,利用字典的对应关系来左括号和右括号相消,如果为空就是真。

代码语言:javascript
复制
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        map = {')':'(',']':'[','}':'{'}
        for i in s:
            # 出现了右括号就不添加
            if i not in map:
                stack.append(i)
            elif not stack or map[i] != stack.pop():
                return False
        return not stack 

当然还有堆栈的方法

代码语言:javascript
复制
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """

        left = '{[('
        rigth = '}])'
        mylist= []
        for i in s:
            if i in left:
                mylist.append(i)
            # 说明就是右括号 
            # 出现了右括号没有左括号 出现了不对应的左括号,如果有就删到
            elif len(mylist) == 0 or left.index(mylist.pop()) != rigth.index(i):
                return False
        return len(mylist) == 0
Java代码
代码语言:javascript
复制
class Solution {
    //3 ms,
    public boolean isValid(String s) {
        // 定义一个栈
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);
            // || 或  如果是左括号就push
            if(ch == '(' || ch == '{' || ch == '['){
                stack.push(ch);
            }else{
                // 现在是右括号
                if(stack.isEmpty()){
                    return false;
                } 
                // 定义删除的pop
                char pop = stack.pop();
                // 三种可能
                if(ch == ')' && pop != '('){
                    return false;
                }else if(ch == '}' && pop != '{'){
                    return false;
                }else if(ch == ']' && pop != '['){
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}
js

js参考大神的题解

代码语言:javascript
复制
/**
 * @param {string} s
 * @return {boolean}
 */

var isValid = function (s) {
    //定义一个map
    var map = {
        "(": ")",
        "[": "]",
        "{": "}"
    }
    while (s.length) {
        var left = s[0];
        if (!(left in map)) 
            return false;
        var i = 1;
        while (s[i] != map[left] && i < s.length) left = s[i++];
        if (s[i] != map[left]) return false
        s = s.slice(0, i - 1) + s.slice(i + 1, s.length);
    }
    return true
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有效的括号
    • Java代码
      • js
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档