P14148

判断序列(栈实现)

难度 4 级 小学 数据结构入门 栈
讨论 统计 127通过 335提交 37.9%通过率 旧版界面
时间限制 3 秒 内存限制 128 MB

题目描述

假设以I和O分别表示栈的入栈和出栈操作(入栈用I表示,出栈用O表示),栈的初始状态为空。已知规定由入栈和出栈操作组成的操作序列仅由I和O组成,又称可以操作的序列为合法序列,否则称为非法序列。现有一个只包含I和O两种字符的序列,请你判断序列是否合法。

如I、IO、III、IOIIOIOO均为合法序列;O、OI、IOO、IOOIOIIO为非法序列。

请你设计一个程序,判断给定的操作序列是否合法。

输入

一行I和O的操作序列,以回车结束输入。只包含I、O两种符号。

输出

一行英文字符:“YES”或“NO”。

样例

样例 1
输入
IOIIOIOO
输出
YES
样例 2
输入
IOOIOIIO
输出
NO

提示

【数据范围】

对于30%的数据满足:序列的长度小于等于100;

对于50%的数据满足:序列的长度小于等于1000;

对于100%的数据满足:序列的长度小于等于100000;

【样例1解释】

初始状态下,题目中已说明,栈中没有元素;

第一个字符I读入后,表示进栈一个元素,此时栈中有1个元素;

第二个字符O读入后,表示出栈一个元素,此时栈中没有元素;

第三个字符I读入后,表示进栈一个元素,此时栈中有1个元素;

第四个字符I读入后,表示进栈一个元素,此时栈中有2个元素;

第五个字符O读入后,表示出栈一个元素,此时栈中有1个元素;

第六个字符I读入后,表示进栈一个元素,此时栈中有2个元素;

第七个字符0读入后,表示出栈一个元素,此时栈中有1个元素;

第八个字符0读入后,表示出栈一个元素,此时栈中没有元素;

此时读入结束,栈中没有元素,序列可以操作,故序列为合法序列。

【样例1解释】

初始状态下,栈中没有元素;

第一个字符I读入后,表示进栈一个元素,此时栈中有1个元素;

第二个字符O读入后,表示出栈一个元素,此时栈中没有元素;

第三个字符O读入时,表示出栈一个元素,此时栈中没有元素依然执行出栈,操作不成功,直接报错,返回错误信息。

Tab 缩进 · 提交后可在下方查看评测状态
请先登录后再提交