首页 > 试题广场 >

好串

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

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

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

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

输入描述:
\hspace{15pt}在一行中输入一个仅由小写字母组成字符串 s1 \leqq |s| \leqq 10^5)。


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

输入

ab

输出

Good

说明

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

输入

aab

输出

Bad

说明

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

输入

abaababababbaabbaaaabaababaabbabaaabbbbbbbb

输出

Bad

备注:

s = input()
res = []
flag=True
for item in s:
    if item == "a":
        res.append(item)
    if item == "b":
        if len(res) == 0:              
            flag=False            
        else:
            res.pop()


if flag==True and len(res) == 0:
    print("Good")
else:
    print("Bad")

发表于 2025-08-06 21:17:19 回复(0)
#还是要利用栈的匹配
s = list(map(str,input().strip()))
'''
思路:
1、将输入的字符串按字符单独存储到数组s中,创建一个新数组a,将输入的这个一个个来进行处理。
2.1、判定a是否为空,为空直接将s[i]值加入a;不为空是进行第二步判定
2.2、判定a[-1]是否为a,是的话再判定s[i]是否为b,是的话pop(a[-1])
2.3、其余情况均直接将s[i]加入a
3、判断a是否为空,为空则输出good,否则输出bad
'''
a = []
for i in s:
    if len(a) == 0:
        a.append(i)
    else:
        if a[-1] == 'a':
            if i == 'b':
                a.pop()
            else:
                a.append(i)
        else:
            a.append(i)

if len(a) == 0:
    print("Good")
else:
    print("Bad")
   
发表于 2025-08-05 16:52:45 回复(0)

问题信息

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

热门推荐

通过挑战的用户

查看代码
好串