说是栈你会做么?
原题链接https://nuoyanli.com/contest/33/problem/H
题目要求为ab形插入,可以理解为()配对
我们需要使用栈来判断是否可以一一配对。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
char a[100005];
scanf("%s",a);
int len=strlen(a);
stack<char>q;//建立栈
int i;
int n=0;//记录位数
for(i=0; i<len; i++)//遍历每一位
{
if(n==0)//判断是否为空栈
{
if(a[i]=='b')//第一位
{
printf("Bad");
return 0;//退出函数
}
else
{
q.push(a[i]);//如果第一位是a就放入
n++;//记录位数
}
}
else
{
if(a[i]=='b')//如果下一位是b则去掉上一个a
{
q.pop();//去除一位
n--;//记录位数
}
else
{
q.push(a[i]);//如果是a就放入
n++;//记录位数
}
}
}
long long d=0;
while(!q.empty())//判断是否为空栈
{
printf("Bad");//非空则说明不能一一配对
d=1;
break;
}
if(d==0)
{
printf("Good");//空栈则可以
}
return 0;
}