问题:
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); } }