数据结构课作业8——括号匹配
时间限制: 1 Sec 内存限制: 128 MB
提交: 278 解决: 113
[提交][状态][讨论版]
题目描述
检查字符串中方括号、圆括号和花括号是否配对
输入
每个字符串一行,以0表示输入结束
输出
true 或者 false 每个一行
样例输入
(12,11,44,[6,[9]),(#)
([#],([2],3,1}
([#],([2],3,1),7)
0
样例输出
false
false
true

这是一道数据结构课后作业,看着蛮简单的,思路也挺清晰,首先明确
错误例子有这些:
1.][
2.[(])
3.(][)
4.[[
可以知道,只判断左右括号个数是否相等是不靠谱的,只能解决第四个
例子,用一个map记录左右括号个数也想过,进来的时候将map[该括号]+=1
然后判断如果当前遇到的括号是右括号的话,查看左括号数是否小于右括号
数,小于的话即为不匹配,这个方法可以解决1.2.4的情况,3.的情况还要
更复杂一些,没有去想,索性直接采用标准做法,用栈来做。
思路如下:
遇到一个左括号,入栈。
遇到一个右括号,查看当前栈顶是否为对应的左括号:
是的情况:栈顶出栈,继续下一个括号的判断
不是的情况:直接中断遍历括号的行为,因为这个就直接不匹配了
感觉思路也蛮清晰的,所以直接就开始写代码了,结果每次提交都是答案
错误
错误代码如下:

 1 import java.io.*;
 2 import java.util.*;
 3 
 4 public class Main {
 5     public static void main(String[] args){
 6         Scanner in = new Scanner(new BufferedInputStream(System.in));
 7         String str = null;
 8         while((str=in.nextLine())!=null){
 9             if(str.charAt(0)=='0' && str.length()==1){
10                 break;
11             }
12             Stack<Character>stack = new Stack<Character>();
13             int false_flag = 0;
14             try{
15                 for(int i=0;i<str.length();i++){
16                     if(str.charAt(i)=='('||str.charAt(i)=='['||str.charAt(i)=='{'){
17                         stack.push(str.charAt(i));
18                         continue;
19                     }
20                     if(str.charAt(i)==')'){
21                         if(stack.peek()!='('){
22                             false_flag = 1;
23                             break;
24                         }else{
25                             stack.pop();
26                         }
27                     }
28                     if(str.charAt(i)==']'){
29                         if(stack.peek()!='['){
30                             false_flag = 1;
31                             break;
32                         }else{
33                             stack.pop();
34                         }
35                     }
36                     if(str.charAt(i)=='}'){
37                         if(stack.peek()!='{'){
38                             false_flag = 1;
39                             break;
40                         }else{
41                             stack.pop();
42                         }
43                     }
44                 }
45             }catch(Exception e){false_flag = 1;}
46             if(false_flag==1){
47                 System.out.println("false");
48             }else{
49                 System.out.println("true");
50             }
51         }
52     }
53 }
View Code

相关文章:

  • 2021-06-21
  • 2021-07-03
  • 2021-11-30
  • 2021-08-09
猜你喜欢
  • 2021-07-08
相关资源
相似解决方案