括号匹配 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 }

 


 

posted @ 2021-12-30 19:03  Imepeto  阅读(574)  评论(0)    收藏  举报