7-1 堆疊操作合法性 (20 分)
阿新 • • 發佈:2018-12-19
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); } } }