#include<iostream>
#include<stack>
using namespace std;
int main()
{
char a[] = { "abcdefg" };
stack<char>s;
int k = 0;
char c;
while (k < 7) {
cin >> c;
if (!s.empty() && c < s.top())break;
while (s.empty() || c != s.top()) {
s.push(a[k++]);
}
if (c == s.top())s.pop();
if (k == 7) {
if (s.empty())goto label;
while (cin >> c) {
if (c != s.top())goto label;
else s.pop();
if (s.empty())goto label;
}
}
}
label:
if (!s.empty())cout << "Fasle" ;
else cout << "True" ;
}
平台总是有一个数据不给过,手动测试的数据都已通过,实在是崩溃了
说一下思路:如果栈为空或者输入的字符不等于栈顶字符就一直按abcdefg序列进栈,如果输入的字符等于栈顶字符就出栈,
当k==7就是七个字符均已进栈之后就判断每次输入的字符是否与栈顶指针相同即可,一旦不同就输出false,直到栈空。
我希望有人能找出代码中存在的漏洞,甚至提供一种更简洁的代码或思路,毕竟用了好多goto