Leetcode --- NO.20 有效的括号(Java)

题目描述

在这里插入图片描述

题目分析

  • 这道题相信接触过数据结构的人都知道怎么做,只需要用到的特性即可

解法分析

  • 先初始化一个栈,然后逐个字符判断,如果是左边的就入栈,如果是右边则出栈,判断是否匹配即可
  • 判断匹配有两种选择,一个是左边入栈时压入右边,出栈判断相等即可,一个是入栈时压入左边,然后出栈时判断是否等于当前字符的对应左边

上代码

  • 使用Java的Stack
class Solution {
    public boolean isValid(String s) {
        if(s == null || s.length() == 0) return true;
        Stack<Character> stack = new Stack<Character>();
        for(char c : s.toCharArray()){
            if(c=='('){
                stack.push(')');
            } else if (c=='['){
                stack.push(']');
            } else if (c=='{'){
                stack.push('}');
            } else {
                if (stack.empty()){
                    return false;
                }
                if (stack.pop() != c){
                    return false;
                }
            }
        }
        return stack.empty();
    }
}
  • 使用数组模拟栈
class Solution {
    public boolean isValid(String s) {
        char[] c = new char[s.length()];
        int p = 0;

        for (char cur : s.toCharArray()){
            if ('(' == cur || '[' == cur || '{' == cur){
                c[p++] = cur;
            }else{
                p--;
                if (p < 0){
                    return false;
                }
                if (c[p] == '(' && cur != ')'){
                    return false;
                }else if (c[p] == '[' && cur != ']'){
                    return false;
                }else if (c[p] == '{' && cur != '}'){
                    return false;
                }
            }
        }
        return p == 0;
    }
}

猜你喜欢

转载自blog.csdn.net/Kobe_k/article/details/107295473