#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
stack<char> q;
for(int i=0;i<s.size();i++)
{
if(s[i]=='a')
q.push(s[i]);
if(q.empty()&&s[i]=='b')
{
cout<<"Bad"<<'\n';
return 0;
}
if(s[i]=='b')q.pop();
}
if(q.empty()) cout<<"Good"<<'\n';
else cout<<"Bad"<<'\n';
return 0;
}
思路:
用栈检查所有ab是否都成对,即每一个a都有对应的b与之匹配(类似括号匹配)。
算法设计:
数据储存:
s储存字符串
stack<char>q作为检查匹配的空间;
数据处理
for循环遍历字符串中的每一个字符,如果是a就储存,如果是b并且栈不空就删去一个a否则输出bad并返回,循环结束后,如果栈为空输出Good,否则输出Bad;
易错点:
判断栈为空才能删除。
栈类型为字符串。
时间复杂度优化,判断为空直接返回。



京公网安备 11010502036488号