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 }
yy_room