括号匹配
时间限制: 1000ms内存限制: 1000kB
描述
假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.
时间限制: 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;
}
}