有效的括号

weblog 641 0 0

leetcode20

原链接:https://leetcode-cn.com/problems/valid-parentheses

题目描述

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

有效字符串需满足:

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

示例 1:

输入:s = "()",输出:true

示例 2:

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

示例 3:

输入:s = "(]",输出:false

示例 4:

输入:s = "([)]",输出:false

示例 5:

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

解题思路

解题过程中会用到数据结构:栈

依次遍历给定的字符串s的每个字符,如果当前遍历的字符是 '(','[','{' 这三个字符其中之一时,将其入栈,放入栈顶。

如果当前遍历的字符是 ')',']','}' 这三个字符其中之一时,判断栈顶的字符和当前遍历的字符是否满足如下条件:

  1. 当前:')',栈顶'('
  2. 当前:']',栈顶'['
  3. 当前:'}',栈顶'{'

当满足上述三个条件之一,则栈顶字符出栈,继续遍历剩下的字符,如果不满足任何条件,那么就可以返回false了,因为这种情况后面的字符永远也不会与之匹配。

直到遍历完所有的字符。如果此时栈中没有任何字符,则证明能全部闭合。否则不能全部闭合。

代码(java)

class Solution {
    public boolean isValid(String s) {
        if (s==null||s.length()%2!=0){
            return false;
        }
        LinkedList<Character> linkedList=new LinkedList();
        char[] as=s.toCharArray();
        for(char a:as){
            if(a=='{'||a=='['||a=='('){
                linkedList.addLast(a);
            }else{
                if(linkedList.size()>0){
                    char c=linkedList.getLast();
                    if(c=='{'&&a=='}'||c=='('&&a==')'||c=='['&&a==']'){
                        linkedList.removeLast();
                    }else{
                        return false;
                    }
                }else{
                    return false;
                }
            }
        }
        if(linkedList.size()>0){
            return false;
        }
        return true;
    }
}
leetcode中的执行结果

猜你喜欢
official 673 1.前导模糊查询不能利用索引(like'%XX'或者like'%XX%')假如这样一列code值为'AAA','AAB','BAA','BAB',如果wherecodelike'%AB'条件,由
official 785 《操作系统》信量机制两种类型整形信量记录型信量复习回顾+思考:之前学习这些进程互斥解决方案分别存在哪些问题?进程互斥四种软件实现方式(单标志法、双标志先检查、双标志后检查
工具 2825 publicstaticstringGetDetailVersion(stringtext){//通过WebBrowser方案获取版本//intmainVer=(newWebBrowser
official 778 -the-current-number/问题描述给你一个数组nums,对于其中每个元素nums[i],请你统计数组中比它小数字数目。换而言之,对于每个nums[i]你必须计算出j数量,其中j满足j!=i且nu
weblog 1004 mysql整数类型范围MySQL支持多种数据类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。其中,整数类型包:TINYINT、SMALLINT、MEDIUMINT、INT和
official 1012 leetcode第257题(简单)原链接:https://leetcode-cn.com/problems/binary-tree-paths/题目描述给定一个二叉树,返回所从根节点到叶子节点
数据结构与算法 6811 科普:第一篇二分搜索论文是1946年发表,然而第一个没bug二分查找法却是在1962年才出现,中间用了16年时间。定义在计算机科学中,二分查找(英语:binarysearch),也称折半搜索
mqtt协议 1613 )五、不同控制报文类型协议格式5.1CONNECT5.1.1可变报头:5.1.2:关于遗嘱相关概念说明5.1.3载荷(Payload)5.2CONACK5.2.1可变报头
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。