7-1 堆棧操作合法性 (20 分)
假設以S和X分別表示入棧和出棧操作。如果根據一個僅由S和X構成的序列,對一個空堆棧進行操作,相應操作均可行(如沒有出現刪除時棧空)且最后狀態也是棧空,則稱該序列是合法的堆棧操作序列。請編寫程序,輸入S和X序列,判斷該序列是否合法。
輸入格式:
輸入第一行給出兩個正整數N和M,其中N是待測序列的個數,M(≤50)是堆棧的最大容量。隨后N行,每行中給出一個僅由S和X構成的序列。序列保證不為空,且長度不超過100。
輸出格式:
對每個序列,在一行中輸出YES如果該序列是合法的堆棧操作序列,或NO如果不是。
輸入樣例:
4 10 SSSXXSXXSX SSSXXSXXS SSSSSSSSSSXSSXXXXXXXXXXX SSSXXSXXX
輸出樣例:
YES NO NO NO
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
int main()
{
char Stack[100];
int N, M;
scanf("%d %d", &N, &M);
for(int i=0; i<N; i++){
scanf("%s", Stack);
int l = 0, len = strlen(Stack), flag = 1;
for(int j=0; j<len; j++){
if(Stack[j]=='S')
l++;
else
l--;
if(l < 0 || l > M){
printf("NO\n");
flag = 0;
break;
}
}
if(flag == 1){
if(l == 0)
printf("YES\n", l);
else
printf("NO\n", l);
}
}
}
