描述

 

假设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;
}

 

posted on 2020-02-19 13:46  海月CSDN  阅读(251)  评论(0编辑  收藏  举报