题目描述
现有a-z 26个小球模拟出入栈操作,小球按照a~z的顺序压入栈,在栈顶的元素可以随时被取出,在游戏开始前给出26个字母的一些排列,问是否能够由出栈顺序得到这个排列。
输入
输入包含多组测试用例。
每组测试用例包含26个字母组成的一个序列。
输出
若出栈顺序合法,输出"yes",否则输出"no".
样例输入
abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy
样例输出
yes no
代码实现
#include <iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
//a~z为升序序列:所以输入字母中任意一个字母其后面的字母都为降序排列则合法,否则非法
int main()
{
char arry[50] = "\0";
while (cin >> arry) {
int num[50] = { 0 };
for (int i = 0;i < 26;i++) {
if (arry[i] >= 'a' && arry[i] <= 'z') {
num[i] = arry[i] - 'a' + 1;
}
}
bool flag = true;
for (int i = 0;i < 26&&flag==true;i++) {
int pre = 999;
for (int j = i + 1;j < 26;j++) {
if (arry[j] < arry[i]) {
if (pre > arry[j])
pre = arry[j];
else {
flag = false;
break;
}
}
}
}
if (flag)
printf("yes\n");
else
printf("no\n");
}
return 0;
}