NC21874 好串
题目
题目描述
牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)
牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来:
一开始,有一个空串,然后执行0次或者若干次操作,每次操作将ab插入当前的字符串
根据上面的定义,ab, aabb, aababb都是好串,aab,ba,abbb并不是好串
现在给你一个字符串s,判断s是否是好串
输入描述
输入一行包含一个字符串,长度不超过
输出描述
输出"Good" 或者 "Bad"
示例1
输入
ab
输出
Good
示例2
输入
aab
输出
Bad
示例3
输入
abaababababbaabbaaaabaababaabbabaaabbbbbbbb
输出
Bad
备注
子任务1:
子任务2:
子任务3:无限制
题解
方法一
知识点:模拟。
这是一道类似括号匹配的题。用 记录 匹配情况, 加一, 减一。如果过程中 ,则说明 多了;若最后 ,则说明 多了。
这种方法只适合一组匹配的对象,多组不同的需要用栈。
时间复杂度
空间复杂度
方法二
知识点:栈。
存入栈,若遇到 则匹配栈顶的 ,如果栈空说明 多了;最后如果还存在 ,即栈非空,则说明 多了。
时间复杂度
空间复杂度
代码
方法一
#include <bits/stdc++.h> using namespace std; bool check(string str) { int cnt = 0; for (auto c : str) { if (c == 'a') cnt++; else cnt--; if (cnt < 0) return 0; } if (cnt > 0) return 0; return 1; } int main() { std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); string str;///单一成对变量可以用计数解决,但是有不同成对的需要用栈 cin >> str; if (check(str)) cout << "Good" << '\n'; else cout << "Bad" << '\n'; return 0; }
方法二
#include <bits/stdc++.h> using namespace std; bool check(string str) { stack<char> s; for (auto c : str) { if (c == 'a') s.push(c); else if (!s.empty() && s.top() == 'a' && c == 'b') s.pop(); else return 0; } if (!s.empty()) return 0; return 1; } int main() { std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); string str; cin >> str; if (check(str)) cout << "Good" << '\n'; else cout << "Bad" << '\n'; return 0; }
本文来自博客园,作者:空白菌,转载请注明原文链接:https://www.cnblogs.com/BlankYang/p/16436315.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧