C++
小诺现有a-z 26个小球模拟出入栈操作,小球按照a~z的顺序压入栈,在栈顶的元素可以随时被取出,在游戏开始前给出任意26个字母的一些排列,问是否能够由出栈顺序得到这个排列。
核心思想在于,从a到z模拟入栈过程,同时跟输入的字母序列进行比较
如果过程中正好相同那么就继续比较下一个,同时模拟入栈过程中的那个字母出栈
如果是正确的入栈那么最后一定可以清空输入的栈,如果不空就说明没有按照正常的入栈规则入栈。
#include <bits/stdc++.h>
using namespace std;
char s[30];
stack<char> q;
int main()
{
while(scanf("%s",s)!=EOF)
{
while(q.size()) q.pop();
int cnt=0;
for(char i='a';i<='z';i++)
{
q.push(i);
while(!q.empty()&&q.top()==s[cnt])
{
cnt++;
q.pop();
}
}
if(q.empty()) printf("yes\n");
else printf("no\n");
}
return 0;
}