链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)
牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来:
一开始,有一个空串,然后执行0次或者若干次操作,每次操作将ab插入当前的字符串
根据上面的定义,ab, aabb, aababb都是好串,aab,ba,abbb并不是好串
现在给你一个字符串s,判断s是否是好串
输入描述:
输入一行包含一个字符串,长度不超过50
输出描述:
输出"Good" 或者 "Bad"
示例1
输入
复制
ab
输出
复制
Good
示例2
输入
复制
aab
输出
复制
Bad
示例3
输入
复制
abaababababbaabbaaaabaababaabbabaaabbbbbbbb
输出
复制
Bad
错解
一开始理解错误题目,认为输入的字符串必须是偶数项而且ab必须相连。
# include <bits/stdc++.h>
using namespace std;
int main(){
string str;
cin>>str;
bool isGood=true;
if(str.length()%2!=0) isGood=false;
else{
for(int i=0;i<str.length()-1;i+=2){
if(str[i]!='a'||str[i+1]!='b') {
isGood=false;
break;
}
}
}
if(isGood==true) cout<<"Good";
else cout<<"Bad";
return 0;
}
输出一直报错百分之六十,参考其他题解,又仔细看了看题目,原来是字符串里面a和b的数目和顺序要对应。
正解
核心思想:遇到a入栈,遇到b出栈,此时如果栈空则bad;b处理完后,如果栈空,也为bad。
# include <bits/stdc++.h>
using namespace std;
int main(){
string str;
stack<char> stk;
cin>>str;
bool isGood=true;
for(int i=0;i<str.size();i++){
if(str[i]=='a') stk.push('a');
else{
if(stk.empty()) {
isGood=false;
break;
}
stk.pop();
}
}
if(!stk.empty()) isGood=false;
if(isGood==true) cout<<"Good";
else cout<<"Bad";
return 0;
}
break是必要的,否则会引起溢出。