nyistoj 15 括号匹配(二)

括号匹配(二)

时间限制:1000 ms  |  内存限制:65535 KB
难度:6
描述
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
输入
第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
输出
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
样例输入
4
[]
([])[]
((]
([)]
样例输出
0
0
3
2

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 bool judge(char ch[],char x)
  5 {
  6     if(x == ']')
  7       x = '[';
  8     else
  9     x = '(';
 10   //  printf("ch1 = %s\n",ch);
 11     int i = 0;
 12     int flag = 1;
 13     for(i = strlen(ch)-1; i >= 0; i--)
 14         if(ch[i] == x) {
 15             flag = 0;
 16             return true;
 17             break;
 18             }
 19         if(flag) return false;
 20 
 21 }
 22 
 23 int main()
 24 {
 25     int T;
 26     scanf("%d",&T);
 27     while(T--)
 28     {
 29         char ch[105];
 30         scanf("%s",ch);
 31         int i = 0;
 32         int k = 0;
 33         char ch1[105];
 34         ch1[0] = '\0';
 35         int t = 0;
 36         int sum = 0;
 37 
 38         for(i = 0; i < strlen(ch); i++)
 39         {
 40             if(ch[i] == '(' || ch[i] == '[')
 41                ch1[t++] = ch[i];
 42             else
 43             {
 44                 ch1[t] = '\0';
 45                 if(ch[i] == ']')
 46                 {
 47                     if(ch1[t-1] == '[')
 48                         {
 49                             t--;
 50                             ch1[t] = '\0';
 51                         }
 52                     else
 53                         {
 54                           if(judge(ch1,ch[i]) == 1)
 55                             while(1)
 56                             {
 57                                 t--;
 58                                 if(ch1[t] == '[')
 59                                    break;
 60                                 sum++;
 61                             }
 62                             else
 63                             sum++;
 64                         ch1[t] = '\0';
 65                         }
 66                     if(t < 0)
 67                         t = 0;
 68                 }
 69                 if(ch[i] == ')')
 70                 {
 71                     if(ch1[t-1] == '(')
 72                        {
 73                            t--;
 74                            ch1[t] = '\0';
 75                        }
 76                     else
 77                     {
 78                         if(judge(ch1,ch[i]) == 1)
 79                             while(1)
 80                             {
 81                                 t--;
 82                                // printf("c1 = %c\n",ch1[t]);
 83                                 if(ch1[t] == '(')
 84                                    break;
 85                                 sum++;
 86                             }
 87                             else
 88                                 sum++;
 89                         ch1[t] = '\0';
 90                     }
 91                     if(t< 0) t = 0;
 92                 }
 93             }
 94         }
 95         ch1[t] = '\0';
 96         //printf("%s  %d\n",ch1,t);
 97         printf("%d\n",sum+t);
 98     }
 99     return 0;
100 }
原文地址:https://www.cnblogs.com/yyroom/p/3010441.html