- import java.util.HashMap;
- import java.util.LinkedList;
- import java.util.Map;
- /*
- * 括号匹配
- * 1. 用栈实现, 如果读取字符为左括号, 入栈
- * 2. 如果读取字符为右括号
- * 栈为空, 返回 false
- * 栈不为空, 和栈顶比较, 是否匹配, 匹配出栈一次, 不匹配返回 false
- * 3. 最后栈不为空, 返回 false, 栈为空返回 true
- */
- public class BracketMatch {
- /*
- * 功能描述
- * @author lkr
- * @date 2019/3/3
- * @param str
- * @return 是否匹配
- */
- public static boolean isMatch(String str){
- // 定义左右括号匹配关系
- Map<Character,Character> map = new HashMap<Character,Character>();
- map.put(')','(');
- map.put('}','{');
- map.put(']','[');
- int length = str.length();// 字符串长度
- LinkedList<Character> stack = new LinkedList<Character>();
- for (int i = 0;i<length;i++){
- // 如果为左括号, 入栈
- if(map.containsValue(str.charAt(i))){
- stack.push(str.charAt(i));
- }
- // 如果为右括号, 判断栈是否为空
- if(map.containsKey(str.charAt(i))){
- if(stack.isEmpty()){
- return false;
- }
- else if (stack.peek() == map.get(str.charAt(i))){
- stack.pop();
- }
- else return false;
- }
- }
- // 寻循环遍历完成判断栈是否为空
- //return stack.isEmpty()?true:false;
- if(stack.isEmpty()){
- return true;
- }
- else return false;
- }
- public static void main(String[] args){
- String str1 = "{[(2+4)+(3-5)/9]*4+1}*{[(2-4)+(3-5)*9]*(4+1)}";
- String str2 = "(){}";
- String str3 = "(){[}";
- String str4 = "(){[)}";
- System.out.println(isMatch(str1));
- System.out.println(isMatch(str2));
- System.out.println(isMatch(str3));
- System.out.println(isMatch(str4));
- }
- }
来源: http://www.bubuko.com/infodetail-2974364.html