其他分享
首页 > 其他分享> > LeeCode 20题:有效的括号

LeeCode 20题:有效的括号

作者:互联网

链接:LeeCode 20
题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

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

示例:
输入:s = “{[]}”
输出:true

输入:s = “([)]”
输出:false

方法一: 使用辅助栈和HashMap
思路:
用HashMap放入成对的括号,右括号为 key ,左括号为value,可通过右括号得到对应的左括号;
遍历输入的String,左括号则压栈;右括号则判断此时栈顶是否为对应的左括号,是则弹栈,否则返回flase

class Solution {
    public boolean isValid(String s) {
    if (s.length()%2==1){  //不成对直接false
        return false;
    }

    Map<Character,Character> pairs =new HashMap<>(){ //集合的双大括号:
        {  //根据右括号 匹配 左括号
            put(')','(');
            put(']','[');
            put('}','{');
        }};
    Stack<Character> stack =new Stack<>();  //创建栈

    for(int i=0;i<s.length();i++){
        char c=s.charAt(i);
        if(pairs.containsKey(c)){ //如果是右括号
            if(stack.empty() || stack.peek()!=pairs.get(c)){
                return false;
            }else stack.pop(); //弹栈
        } //如果是左括号
        else stack.push(c); //压栈
    }

    return stack.empty(); //如果为空则匹配 ,不为空则左括号多了
    }
}

注意;此处必须是右括号和栈顶成对,这样才满足括号以正确的顺序闭合,如:"([)]" 是错误的,未按正确的顺序闭合。

标签:pairs,20,HashMap,return,括号,LeeCode,false,stack
来源: https://blog.csdn.net/Swofford/article/details/122746530