题目描述牛牛喜欢跟字符串玩耍他学会了一种新操作在当前字符串中任意位置包括开头和结尾插入子串 ab。牛牛称一个字符串为好串当且仅当它可以通过若干次上述操作从空串生成。例如ab、aabb、aababb 都是好串而 aab、ba、abbb 不是好串。现给定一个字符串 s请判断字符串 s是否是好串。输入描述在一行中输入一个仅由小写字母组成字符串 s1≦∣s∣≦105。输出描述如果字符串 s 是好串输出 Good否则输出Bad。示例1输入ab输出Good说明初始空串插入一次 ab 即可得到 ab。示例2输入aab输出Bad说明无法通过插入 ab 操作得到 aab。示例3输入abaababababbaabbaaaabaababaabbabaaabbbbbbbb输出Bad解题思路同样是括号匹配的算法首先通过字符的读取函数getchar()进行读取字符串之后压入到主栈s中之后对主栈s进行遍历将压入到辅助栈中之后更新辅助栈的栈顶指针之后如果主栈为b与辅助栈进行对比如果辅助栈的栈顶元素为a之后主栈的栈顶元素为b辅助栈的栈顶指针--但是如果辅助栈与主栈的栈顶元素相同的话将valid字段更新为0同样如果辅助栈的栈顶指针为-1的话也将valid字段更新为0。代码实现#include stdio.h #include stdlib.h #define Maxsize 10001 typedef struct { char ch[Maxsize]; int top; }Stack; int main() { //初始化栈 Stack s; s.top -1; //初始化栈中的元素 char c; while((c getchar())!EOFc ! \n){ s.ch[s.top] c; } Stack t; t.top -1; int valid 1; for(int i 0;i s.top;i){ char ch s.ch[i]; if(ch a){ t.ch[t.top] ch; }else{ if(t.top -1){ valid 0; break; } char cht t.ch[t.top]; if(ch bcht a){ t.top--; }else{ valid 0; break; } } } if(valid 1t.top-1){ printf(Good); }else{ printf(Bad); } return 0; }