leetcode-20-有效的括号

问题:

package com.example.demo;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class Test20 {

    /**
     * 有效括号
     * 利用栈数据结构,遇到{ [ ( 等左括号,就入栈,遇到右括号就将栈中的一个元素取出,进行比较
     * 符合则继续判断下一个
     */
    public boolean isValid(String s) {

        Map<String, String> map = new HashMap<>();
        map.put("(", ")");
        map.put("{", "}");
        map.put("[", "]");

        Stack<String> stack = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
            String sub = s.substring(i, i + 1);
            if ("(,{,[,".contains(sub)) {
                stack.push(sub);
            } else {
                // 如果stack中已经没有元素了 则改一个固定值,该固定值不属于括号的一种,则比较的时候会返回false
                String pop = stack.isEmpty() ? "#" : stack.pop();
                if (!sub.equals(map.get(pop))) {
                    return false;
                }
            }
        }
        // 根据栈中时候仍有元素来判断时候已经匹配完成
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        Test20 t = new Test20();
        boolean valid = t.isValid("()()(]){}[]");
        System.out.println(valid);
    }
}
原文地址:https://www.cnblogs.com/nxzblogs/p/11276685.html