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 好串的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(62)-EF链接串加密

    系列目录 前言: 这一节提供一个简单的功能,这个功能看似简单,找了一下没找到EF链接数据库串的加密帮助文档,只能自己写了,这样也更加符合自己的加密要求 有时候我们发布程序为了避免程序外的SQL链接串明 ...

  2. JQuery使用deferreds串行多个ajax请求

    使用JQuery对多个ajax请求串行执行. HTML代码: <a href="#">Click me!</a> <div></div&g ...

  3. iOS 字典或者数组和JSON串的转换

    在和服务器交互过程中,会iOS 字典或者数组和JSON串的转换,具体互换如下: // 将字典或者数组转化为JSON串 + (NSData *)toJSONData:(id)theData { NSEr ...

  4. iOS:GCD理解1(同步-异步、串行-并行)

    1.并行-异步(ST1与ST2抢占资源) 1-1).获取 并行(全局)队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级. dispatch_queue_t queu ...

  5. 关于用sql语句实现一串数字位数不足在左侧补0的技巧

    在日常使用sql做查询插入操作时,我们通常会用到用sql查询一串编号,这串编号由数字组成.为了统一美观,我们记录编号时,统一指定位数,不足的位数我们在其左侧补0.如编号66,我们指定位数为5,则保存数 ...

  6. [LeetCode] Longest Palindrome 最长回文串

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

  7. [LeetCode] Shortest Palindrome 最短回文串

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  8. [LeetCode] Palindrome Partitioning II 拆分回文串之二

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  9. [LeetCode] Palindrome Partitioning 拆分回文串

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

随机推荐

  1. partTwo自动出题程序第三阶段

    课堂测试3: 2.可定制(数量/打印方式):输入大的数量值,测试一下系统是否崩溃,反向查找系统是否优化的余地: 3.定制操作数的个数: 4.定制是否有乘除法 5.定制是否有括号(随机加入) 6 .定制 ...

  2. Java 18 新特性:简单Web服务器 jwebserver

    在今年3月下旬的时候,Java版本已经更新到了18.接下来DD计划持续做一个系列,主要更新从Java 9开始的各种更新内容,但我不全部都介绍,主要挑一些有意思的内容,以文章和视频的方式来给大家介绍和学 ...

  3. SpringMVC的文件上传下载,异常处理,拦截器的小总结

    文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...

  4. python学习Day21

    目录 今日内容详细 作业讲解 os模块 知识点进修 创建目录(文件夹) 删除目录(文件夹) 查看某个路径下所有的文件名称(文件.文件夹) 删除文件.重命名文件 获取当前路径.切换路径 软件开发目录规范 ...

  5. Linux内核浅入浅出

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 01 前言 拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是Linux内核是什么,它用于什么?且听 ...

  6. 【爬虫+情感判定+Top10高频词+词云图】“谷爱凌”热门弹幕python舆情分析

    一.背景介绍 最近几天,谷爱凌在冬奥会赛场上夺得一枚宝贵的金牌,为中国队贡献了自己的荣誉! 针对此热门事件,我用Python的爬虫和情感分析技术,针对小破站的弹幕数据,分析了众网友弹幕的舆论导向,下面 ...

  7. Java学习笔记-基础语法Ⅳ

    多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...

  8. 谈谈markdown

    谈谈markdown 欢迎关注我的博客,️点他即可. 最近一年开始学习有关编程的内容了. 迷上代码的我开始接触到一些好玩的东西,我发现很多事情都可以由代码来完成,甚至是ppt.同学就经常说我疯掉了,连 ...

  9. linux篇-linux 下tomcat服务每天定时启动

    1l先准备一个脚本 #!/bin/sh #./etc/profile export JAVA_HOME=/usr/java/jdk1.6.0_45 sh /home/tomcat-bingchuang ...

  10. Hadoop安装学习(第四天)

    学习任务:解决9000端口丢失导致hadoop无法连接的问题 解决方法:格式化namenode 步骤: 1.进入hadoop/bin 2.输入命令:hadoop namenode -format(hd ...