阿里-马云的学习笔记

导航

算法题:有效的括号

一、题目

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

举例:

([{}])合法,([)]不合法

 

二、代码

package structure.stack;

import java.util.Stack;

public class BracketMatch {

    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            /**
             * 1、括号分为左括号、右括号。左括号有(、[、{,右括号有)、]、}
             * 2、循环字符串中所有字符,若为左括号,则入栈,右括号,则跟栈顶元素进行比较是否匹配
             */
            if(c == '(' || c == '[' || c == '{') {
                stack.push(c);
            }else {
                if(stack.isEmpty()) {
                    return false;
                }
                if(c == ')' && stack.pop() != '(') {
                    return false;
                }
                if(c == ']' && stack.pop() != '[') {
                    return false;
                }
                if(c == '}' && stack.pop() != '{') {
                    return false;
                }
            }
        }
        // 若字符串的括号两两匹配,最终栈中元素应该为空。
        return stack.isEmpty();
    }
    
    public static void main(String[] args) {
        BracketMatch bracketMatch = new BracketMatch();
        System.out.println(bracketMatch.isValid("([{}])"));
        System.out.println(bracketMatch.isValid("([)]"));
    }
}

 

posted on 2021-04-25 14:19  阿里-马云的学习笔记  阅读(155)  评论(0编辑  收藏  举报