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)); } }
java---括号匹配
最新推荐文章于 2023-06-08 19:22:25 发布