NC21874 好串
NC21874 好串
题目
题目描述
牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)
牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来:
一开始,有一个空串,然后执行0次或者若干次操作,每次操作将ab插入当前的字符串
根据上面的定义,ab, aabb, aababb都是好串,aab,ba,abbb并不是好串
现在给你一个字符串s,判断s是否是好串
输入描述
输入一行包含一个字符串,长度不超过 \(50\)
输出描述
输出"Good" 或者 "Bad"
示例1
输入
ab
输出
Good
示例2
输入
aab
输出
Bad
示例3
输入
abaababababbaabbaaaabaababaabbabaaabbbbbbbb
输出
Bad
备注
子任务1:\(n \leq 10\)
子任务2:\(n \leq 20\)
子任务3:无限制
题解
思路
方法一
知识点:模拟。
这是一道类似括号匹配的题。用 \(cnt\) 记录 \(ab\) 匹配情况,\(a\) 加一,\(b\) 减一。如果过程中 \(cnt<0\) ,则说明 \(b\) 多了;若最后 \(cnt>0\),则说明 \(a\) 多了。
这种方法只适合一组匹配的对象,多组不同的需要用栈。
时间复杂度 \(O(n)\)
空间复杂度 \(O(n)\)
方法二
知识点:栈。
\(a\) 存入栈,若遇到 \(b\) 则匹配栈顶的 \(a\) ,如果栈空说明 \(b\) 多了;最后如果还存在 \(a\) ,即栈非空,则说明 \(a\) 多了。
时间复杂度 \(O(n)\)
空间复杂度 \(O(n)\)
代码
方法一
#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;
}
NC21874 好串的更多相关文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(62)-EF链接串加密
系列目录 前言: 这一节提供一个简单的功能,这个功能看似简单,找了一下没找到EF链接数据库串的加密帮助文档,只能自己写了,这样也更加符合自己的加密要求 有时候我们发布程序为了避免程序外的SQL链接串明 ...
- JQuery使用deferreds串行多个ajax请求
使用JQuery对多个ajax请求串行执行. HTML代码: <a href="#">Click me!</a> <div></div&g ...
- iOS 字典或者数组和JSON串的转换
在和服务器交互过程中,会iOS 字典或者数组和JSON串的转换,具体互换如下: // 将字典或者数组转化为JSON串 + (NSData *)toJSONData:(id)theData { NSEr ...
- iOS:GCD理解1(同步-异步、串行-并行)
1.并行-异步(ST1与ST2抢占资源) 1-1).获取 并行(全局)队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级. dispatch_queue_t queu ...
- 关于用sql语句实现一串数字位数不足在左侧补0的技巧
在日常使用sql做查询插入操作时,我们通常会用到用sql查询一串编号,这串编号由数字组成.为了统一美观,我们记录编号时,统一指定位数,不足的位数我们在其左侧补0.如编号66,我们指定位数为5,则保存数 ...
- [LeetCode] Longest Palindrome 最长回文串
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
- [LeetCode] Shortest Palindrome 最短回文串
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...
- [LeetCode] Palindrome Partitioning II 拆分回文串之二
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- [LeetCode] Palindrome Partitioning 拆分回文串
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
随机推荐
- springboot整合freemark,thymeleaf
先在pom文件引入freemark,thymeleaf的依赖,thymeleaf的html文件放在Resource-templates-thymeleaf目录下,freekmarker的ftl文件放在 ...
- [题解] 树(tree)
题目大意 给定一颗 \(N\) 个点的有根树,其中 \(1\) 是树根,除了 \(1\) 以外的其他点 \(u\) 有唯一的父亲 \(Father_u\).同时,给定 \(M\) 条路径,第 \( ...
- Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...
- Linux 环境变量配置的 6 种方法,建议收藏
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量 ...
- CTO 说了,如果发现谁用 kill -9 关闭程序就开除
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 来源:blog.csdn.net/qq_33220089 正文 kil ...
- .net core JWT验证,HttpContext.User为空的问题
这几天在学习张老师.net core教程JWT部分,链接 https://mp.weixin.qq.com/s/7135y3MkUlPIp-flfwscig 教程使用的.net core 2.2, 在 ...
- mapboxgl 中插值表达式的应用场景
目录 一.前言 二.语法 三.对地图颜色进行拉伸渲染 1. 热力图 2. 轨迹图 2. 模型网格渲染 四.随着地图缩放对图形属性进行插值 五.interpolate的高阶用法 六.总结 一.前言 in ...
- 并发编程系列之Lock锁可重入性与公平性
一.相似之处:Lock锁 vs Synchronized 代码块 Lock锁是一种类似于synchronized 同步代码块的线程同步机制.从Java 5开始java.util.concurrent. ...
- MySQL分库分表-理论
分库分表的几种方式 把一个实例中的多个数据库拆分到不同的实例 把一个库中的表分离到不同的数据库中 数据库分片前的准备 在数据库并发和负载没有达到限制时,不推荐水平拆分 对一个库中的相关表进行水平拆分到 ...
- Java高并发-无锁
一.无锁类的原理 1.1 CAS CAS算法的过程是这样:它包含3个参数CAS(V,E,N).V表示要更新的变量,E表示预期值,N表示新值.仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同, ...