描述
假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。
输入
多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。
输出
对应每组数据输出一行。若序列A为合法序列输出“TRUE”,反之输出“FALSE”。
输入样例 1
IOIOIO IIOOOO 0
输出样例 1
TRUE FALSE
#include <iostream>
using namespace std;
int Judge(char str[]){
int i=0;
int jI;//入栈操作的次数
int kO;//出栈操作的次数
jI=kO=0;
while(str[i]!='\0')
{
switch(str[i]){
case 'I':
jI++;
break;
case 'O'://当遇到出栈操作时,要判断这个状态下入栈的次数是否大于
//出栈的次数
kO++;
if(kO>jI)
{
printf("FALSE\n");
return 0;
}
break;
}
i++;
}
//无论出栈还是入栈,指针都要后移
if(jI==kO)
{
printf("TRUE\n");
return 1;
}
else
{
printf("FALSE\n");
return 0;
}
}
int main()
{
string str;
while(1)
{
cin>>str;
if(str=="0")return 0;
Judge(&str[0]);
}
return 0;
}
原博地址
https://blog.csdn.net/weixin_43673589