生活随笔
收集整理的這篇文章主要介紹了
NYOJ 2 括号配对问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
括號配對問題
時間限制:
3000 ms? |?????????? 內(nèi)存限制:
65535 KB
難度:
3
描述
現(xiàn)在,有一行括號序列,請你檢查這行括號是否配對。 輸入第一行輸入一個數(shù)N(0<N<=100),表示有N組測試數(shù)據(jù)。后面的N行輸入多組輸入數(shù)據(jù),每組輸入數(shù)據(jù)都是一個字符串S(S的長度小于10000,且S不是空串),測試數(shù)據(jù)組數(shù)少于5組。數(shù)據(jù)保證S中只含有"[","]","(",")"四種字符輸出每組輸入數(shù)據(jù)的輸出占一行,如果該字符串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No樣例輸入 3
[(])
(])
([[]()]) 樣例輸出 No
No
Yes
/* 思路:通過對輸入的元素配對消元,然后檢查所有的元素是否都已配對消元,從而輸出最終的結(jié)果
*/
#include<stdio.h>
#define N 10000+10
char s[N];int main()
{int n;char c,*p;scanf("%d\n",&n);while(n--){*s=getchar();p=s+1;while((c=getchar())!='\n'){if(*(p-1)==c-1||*(p-1)==c-2)p--;else*p++=c;}if(p==s)printf("Yes\n");elseprintf("No\n");}
}
?堆棧實(shí)現(xiàn):
#include<stdio.h>
#include<stdlib.h>#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10typedef char SElemType;
typedef char Status;struct SqStack
{SElemType *base;SElemType *top;int stacksize;
};//初始化堆棧空間
Status InitStack(SqStack *S)
{S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S->base)return ERROR;S->top=S->base;S->stacksize=STACK_INIT_SIZE;return OK;
}//入棧操作
Status Push(SqStack *S,SElemType e)
{if(S->top-S->base>=S->stacksize){S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));if(S->base==NULL) return ERROR;S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top++=e; return OK;
}//入棧操作
Status Pop(SqStack *S,SElemType *e)
{if(S->top==S->base)return ERROR;*e=*(--S->top); return OK;
}//得到棧頂元素
Status GetTop(SqStack *S,SElemType *e)
{if(S->top==S->base){*e='\0'; //棧空取回 '\0'return ERROR;}*e=*(S->top-1);return OK;
}Status StackEmpty(SqStack *S)
{if(S->top==S->base)return 0;elsereturn 1;
}int main()
{SqStack S; int n;char a,b,c;scanf("%d",&n); getchar();if(InitStack(&S)){while(n--){ while(1){a=getchar(); //putchar(a);if(a=='\n')break;GetTop(&S,&b);if(a==b+1 || a==b+2){Pop(&S,&c);// printf("遇%c出棧操作 \n",a);} else{Push(&S,a);// printf("遇%c入棧操作 \n",a); }}if(!StackEmpty(&S)){printf("Yes\n");}else {printf("No\n");}S.top=S.base;} }}
?
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的NYOJ 2 括号配对问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。