括号匹配算法:
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