#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;

易错点:

判断栈为空才能删除。

栈类型为字符串。

时间复杂度优化,判断为空直接返回。