每日一道算法题006 有效的括号

576 阅读1分钟

题目

leetCode 第 20 题,有效的括号

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

有效字符串需满足:

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

示例 1:

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

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

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

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

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

提示:

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

做题时间

class Solution {
    public boolean isValid(String s) {
    
    
    }
}

以上给出方法输入参数,完成作答。

题目分析

  1. 题目叫做有效括号,其实就是我们日常的括号使用规则
  2. 看到题目第一时间就想到了用到栈这种数据结构,方便操作
  3. 使用栈进行括号的操作,左括号入栈,右括号出栈

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行耗时:2 ms,击败了75.29% 的Java用户
内存消耗:36.7 MB,击败了29.63% 的Java用户

class Solution {
    public boolean isValid(String s) {
        Stack<String> stack = new Stack<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (!getRight(chars[i]).equals("no")) {//左括号 入栈
                stack.push(getRight(chars[i]));
            } else {//右括号 出栈
                if (stack.isEmpty()){
                    return false;
                }else {
                    String pop = stack.pop();
                    if (!String.valueOf(chars[i]).equals(pop)) {
                        return false;
                    }
                }

            }
        }
        //最后不为空也是无效括号
        if (stack.isEmpty()) {
            return true;
        } else {
            return false;
        }

    }

    private String getRight(char left) {
        switch (left) {
            case '(':
                return ")";
            case '[':
                return "]";
            case '{':
                return "}";
            default:
                return "no";
        }
    }
}