括号匹配 JAVA
输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match
输入格式:
一行只含 ( ) [ ] { } 这6种字符,不含其它任何字符的字符串。字符串不超过1000个字符。
输出格式:
如果输入的右括号多余,输出:
Extra right brackets
如果输入的左括号多余, 输出:
Extra left brackets
如果输入的括号不匹配,输出:
Brackets not match
如果输入的括号匹配,输出:
Brackets match
输入样例:
{{{{)))
结尾无空行
输出样例:
Brackets not match
结尾无空行
因为左右括号顺序要对应的上,左括号肯定是先进后出,后进先出,所以可以使用栈去做
代码区:
1 import java.util.Scanner; 2 import java.util.Stack; 3 public class test5 { 4 5 public static void main(String[] args) { 6 Scanner scan = new Scanner(System.in); 7 System.out.println("请输入括号:"); 8 String s = scan.next(); 9 scan.close(); 10 char[] c = s.toCharArray(); 11 Tools tool = new Tools(); 12 tool.kh(c); 13 14 } 15 16 } 17 class Tools{ 18 public void kh(char[] c) { 19 Stack<Character> stk = new Stack<>(); 21 for(char cha : c) { 22 if(cha == '(' || cha == '[' || cha == '{') 23 //如果是左边的括号就放入栈 24 stk.push(cha); 25 else { 26 //右边括号就进行判断 27 if(stk.empty()) { 28 //如果栈为空,即右括号多了 29 System.out.println("Extra right brackets"); 30 return; 31 } 32 if((stk.peek() == '(' && cha != ')' ) 33 || (stk.peek() == '[' && cha != ']' ) 34 || (stk.peek() == '{' && cha != '}' )) 35 //判断左右括号能否对应上{ 36 System.out.println("Brackets not match"); 37 return; 38 } 39 stk.pop();//上面的if都过了,说明左右括号对应,将栈顶元素弹出 40 } 41 } 42 if(!stk.empty()) //如果栈不为空,说明左括号多了 43 System.out.println("Extra left brackets"); 44 else 45 System.out.println("Brackets match"); 46 //为空代表全部对应 47 } 48 }
