描述
假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。
输入
多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。
输出
对应每组数据输出一行。若序列A为合法序列输出“TRUE”,反之输出“FALSE”。
输入样例 1
IOIOIO
IIOOOO
0
输出样例 1
TRUE FALSE
#include<iostream>
using namespace std;
#define OK 1
int Judge(char str[]){
int push;
int pop;
int i=0;
push = pop = 0;
while(str[i]!='\0'){
switch(str[i]){
case'I':
push++;
break;
case'O':
pop++;
if(pop>push)
{
cout<<"FALSE"<<endl;
return 0;
}
break;
}
i++;
}
if(push == pop){
cout<<"TRUE"<<endl;
return OK;
}
else{
cout<<"FALSE"<<endl;
return 0;
}
}
int main(){
string str ;
while(1)
{
cin>>str;
if(str=="0")return 0;
Judge(&str[0]);
}
return 0;
}