括号匹配算法:
package com.jintao.example.algorithm; import java.util.HashMap; import java.util.Map; import java.util.Stack; /** * @author jinjueYang * @description 括号匹配 * @date 2019/11/2 9:02 */ public class BracketsMatch { private static final Map<Character, Character> bracketsMap = new HashMap(); static { bracketsMap.put(')', '('); bracketsMap.put('}', '{'); bracketsMap.put(']', '['); bracketsMap.put('>', '<'); } public static void main(String[] args) { System.out.println(isMatch("(32+9)*5+[9-9{]}")); System.out.println(isMatch("(32+9)*5+[9-9{}]")); System.out.println(isMatch("<Y>{F}")); System.out.println(isMatch("<Y>{F}[{]")); } public static boolean isMatch(String str) { if (null == str) { return false; } char[] ch = str.toCharArray(); Stack<Character> stack = new Stack<>(); for (char c : ch) { if (bracketsMap.containsValue(c)) { //遇到左括号入栈 stack.push(c); } else if (bracketsMap.containsKey(c)) { //遇到右括号出栈,如果栈为空或出栈的括号不匹配那么表示匹配失败 if (stack.empty() || (!stack.pop().equals(bracketsMap.get(c)))) { return false; } } } return stack.isEmpty(); } }运行结果:
false true true false
