括号匹配
时间限制: 1000ms内存限制: 1000kB
描述
假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.
输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match
输入
{{{{)))
输出
Brackets not match
样例输入
{([)]}
样例输出
Brackets not match
参考代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static void main(String[] args) throws IOException { BufferedReader cin = new BufferedReader(new InputStreamReader(System.in)); String s = cin.readLine(); int kind = judge(s); switch(kind){ case 0: System.out.println("Brackets match"); break; case 1: System.out.println("Brackets not match"); break; case 2: System.out.println("Extra left brackets"); break; case 3: System.out.println("Extra right brackets"); break; } } private static int judge(String s) { Stack<Character> stk = new Stack<Character>(); for(int i = 0;i < s.length();++ i){ char c = s.charAt(i); switch(c){ case '{': case '[': case '(': stk.push(c); break; case '}': if(stk.isEmpty()){ return 3; } if('{' != stk.lastElement()) return 1; stk.pop(); break; case ']': if(stk.isEmpty()){ return 3; } if('[' != stk.lastElement()) return 1; stk.pop(); break; case ')': if(stk.isEmpty()){ return 3; } if('(' != stk.lastElement()) return 1; stk.pop(); break; } } if(!stk.isEmpty()){ return 2; } return 0; } }