java---括号匹配

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));

}
}

猜你喜欢

转载自www.cnblogs.com/turningli/p/10464108.html