有效的括号(Java)

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

有效字符串需满足:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解:
运用栈
遍历字符串依次取出每个字符

  1. 如果当前字符是左括号,就把当前字符入栈
  2. 如果当前字符是右括号,取出栈顶元素,看栈顶元素和当前括号类型是否匹配
  3. 如果类型匹配,栈顶元素出栈(用pop),继续取下一个字符
  4. 如果类型不匹配,直接判定成非法,return false即可
  5. 当遍历完整个字符串之后,就看栈中的内容是否为空栈,如果为空就是合法的,反之,非法.

代码如下:

public boolean isValid(String s) {
        Map<Character,Character> map = new HashMap<>();
        map.put('(',')');
        map.put('{','}');
        map.put('[',']');

        //1.创建一个栈,栈里保存字符类型
        Stack<Character> stack = new Stack<>();
        //2.循环遍历字符串中的每个字符
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            //3.判断 c 是否为左括号,如果是左括号,就入栈
            //单引号表字符;双引号表String
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
                continue;//进入下次循环,取出下一个字符
            }
            if (stack.empty()) {
                //如果发现当前字符不是左括号,并且栈又为空,此时也就说明字符串非法
                //当前情况说明,之前没有合适的左括号和当前括号匹配
                return false;
            }
            //4.判定 c 是否为右括号,如果是右括号,就取栈顶元素对比一下
            char top = stack.pop(); //pop即可以return出栈顶元素,也可以出栈
            if (map.get(top) == c) {
                continue;
            }
            //除了上面三种合法情况,剩下的都是非法情况
            return false;
        }
        //遍历完字符串之后,还要看栈是否为空,空栈才能是合法的字符串
        if (stack.empty()) {
            return true;
        }
        return false;
    }

你可能感兴趣的:(有效的括号(Java))