1098: 括号配对问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: 5 [提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符. 输出 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No. 样例输入 3 [(]) (]) ([[]()]) 样例输出 No No Yes
很简单的一道题 就是纯 堆栈问题 很适合 用于 理解堆栈的 例题 下面附上代码.
1 #include<stdio.h> 2 int main() 3 { 4 int n,i,j,top,flag; 5 char s[10000],st[5000]; 6 char c; 7 scanf("%d ",&n); 8 for(i=1; i<=n; i++) 9 { 10 top=-1; 11 scanf("%s",s); 12 flag=0; 13 for(j=0; c=s[j]; j++){ 14 if(c=='[' || c=='(') 15 { //遇到左括号,则存入数组st(模拟栈操作——进栈) 16 top++; 17 st[top]=c; 18 } 19 else 20 { //遇到右括号,检查匹配情况 21 if(top<0) 22 { 23 flag=1; 24 break; 25 } //栈为空,不匹配,跳出循环 26 if(c==']' && st[top]=='[' || c==')' && st[top]=='(') //与栈顶匹配,——退栈 27 top--; 28 else //与栈顶不匹配,跳出循环 29 { 30 flag=1; 31 break; 32 } 33 } 34 } 35 if(flag || top>=0) 36 printf("No "); 37 else 38 printf("Yes "); 39 } 40 return 0; 41 }