import java.util.*;
public class Main1 {
private Map<Character,Character> map = new HashMap<>();
private Set<Character> set = new HashSet<>();
Main1(){
map.put('(',')');
map.put('{','}');
map.put('[',']');
set.add('}');
set.add(']');
set.add(')');
}
public boolean check(String str){
Stack<Character> stack = new Stack<>();
Boolean flage = true;
for(Character c:str.toCharArray()){
if(map.containsKey(c)){
stack.push(c);
continue;
}
if(set.contains(c)){
if(stack.isEmpty()){
flage = false;
break;
}
Character character = stack.pop();
if(character == null){
flage = false;
break;
}
if(!Objects.equals(map.get(character),c)) {
flage = false;
break;
}
}
}
if(stack.size() !=0){
flage = false;
}
return flage;
}
public static void main(String[] args) {
Main1 main1 = new Main1();
Boolean flag = main1.check("{");
System.out.println(flag);
Boolean flag2 = main1.check("}");
System.out.println(flag2);
Boolean flag3 = main1.check("{]}");
System.out.println(flag3);
Boolean flag4 = main1.check("{[}");
System.out.println(flag4);
Boolean flag5 = main1.check("{[]}");
System.out.println(flag5);
Boolean flag6 = main1.check("{asdasdasd[asdasdasd]}");
System.out.println(flag6);
Boolean flag7 = main1.check("{}}}}");
System.out.println(flag7);
}
}
输出结果:
原理很简单,但是有一些边界条件需要注意。