首页 > 试题广场 >

好串

[编程题]好串
  • 热度指数:885 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}牛牛喜欢跟字符串玩耍,他学会了一种新操作:在当前字符串中任意位置(包括开头和结尾)插入子串 "ab"。

\hspace{15pt}牛牛称一个字符串为好串,当且仅当它可以通过若干次上述操作从空串生成。

\hspace{15pt}例如,`ab`、`aabb`、`aababb` 都是好串,而 `aab`、`ba`、`abbb` 不是好串。

\hspace{15pt}现给定一个字符串 `s`,请判断 `s` 是否是好串。

输入描述:
\hspace{15pt}在一行中输入一个字符串 `s`,仅由小写字母组成,长度满足 1 \leqq |s| \leqq 10^5


输出描述:
\hspace{15pt}如果 `s` 是好串,输出 `Good`;否则输出 `Bad`。
示例1

输入

ab

输出

Good

说明

初始空串,插入一次 "ab" 即可得到 "ab"。
示例2

输入

aab

输出

Bad

说明

无法通过插入 "ab" 操作得到 "aab"。
示例3

输入

abaababababbaabbaaaabaababaabbabaaabbbbbbbb

输出

Bad

备注:

import java.util.Deque;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            char[] str = a.toCharArray();
            Deque<Character> stack = new ArrayDeque<>();
            Boolean good = true;
            for(char m:str){
                if(m == 'a'){//如果元素为a,入栈
                        stack.push(m);
                }else if(m == 'b'){//如果元素为b,若栈空,则返回错误并结束循环;否则弹出栈顶元素
                    if(stack.isEmpty()){
                        good = false;
                        break;
                    }else{
                        stack.pop();
                    }
                }
            }
            good = good && stack.isEmpty()?true:false;
            System.out.println(good ? "Good" : "Bad");
        }
    }
}
发表于 2025-07-10 21:33:04 回复(0)
s = input()
stack = [0]
for i in s:
    if i=="a":
        stack.append(i)
    elif i=="b":
        if stack[-1]=="a":
            stack.pop()
        else:
            print("Bad")
            exit(0)
if stack[-1]==0:
    print("Good")
else:
    print("Bad")

#括号匹配的变形 :1

发表于 2025-06-22 01:28:41 回复(0)

问题信息

上传者:牛客301599号
难度:
2条回答 172浏览

热门推荐

通过挑战的用户

查看代码
好串