You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅含a、b的字符串连续重复组消除问题:代码逻辑错误排查(应返回1却返回0)

仅含a、b的字符串连续重复组消除问题:代码逻辑错误排查(应返回1却返回0)

看起来你遇到了代码逻辑和预期不符的问题,明明应该返回1(能消为空),结果却返回0了。先帮你梳理下核心问题,顺便纠正你说要用栈但代码里完全没用到的小疏忽~

首先,你的代码核心逻辑问题

你提到想用栈实现O(n)复杂度,但当前代码里的stack变量完全是摆设,现在的实现是多次遍历字符串,时间复杂度是O(k*n)(k是循环次数),更关键的是,你的逻辑理解和题目要求可能有偏差:
你的代码现在做的是一次性把原字符串中所有连续出现≥2次的字符组全部删除,然后把剩下的单个字符拼接起来,重复这个过程直到字符串不变。但这种处理方式没有模拟“消除后前后字符合并,可能产生新的可消除组”的动态过程——举个例子,比如测试用例是abbaa:

  • 原字符串的连续组是a(1)、bb(2)、aa(2),你的代码直接删除bb和aa,只保留第一个a,得到s="a"返回0。但如果题目要求是“消除相邻重复对后合并字符串,重复操作”,那正确流程应该是:先消除bb得到aaa,再消除前两个a得到a,最终还是返回0;但如果题目要求是“只要有连续≥2次就全部消除”,那aaa应该被全部消除,返回1,这时候你的代码逻辑就错了,因为它没有处理合并后的aaa,而是直接删除了原字符串中的aa组。

为什么会出现“应返回1却返回0”的情况?

大概率是你实现的规则和题目要求的规则不一致。如果题目是类似“消消乐”的相邻重复对消除(每次消除两个相邻相同字符,合并后继续),那正确的栈实现应该是这样的:

def can_reduce_to_empty(s):
    stack = []
    for char in s:
        if stack and stack[-1] == char:
            # 遇到和栈顶相同的字符,弹出栈顶(消除这一对)
            stack.pop()
        else:
            stack.append(char)
    # 栈为空说明全部消除
    return 1 if not stack else 0

# 输入输出处理不变
def main():
    T = int(input().strip())
    results = []
    for _ in range(T):
        s = input().strip()
        results.append(can_reduce_to_empty(s))
    print("\n".join(map(str, results)))

if __name__ == "__main__":
    main()

这个栈实现的逻辑是:

  • 遍历每个字符,栈里保存当前未被消除的字符
  • 如果当前字符和栈顶字符相同,说明遇到了相邻重复对,弹出栈顶(相当于消除这一对)
  • 如果不同,就把当前字符压入栈
  • 最后栈为空,说明所有字符都被成对消除,返回1,否则返回0

比如测试用例abba:

  1. 压入a → [a]
  2. 压入b → [a, b]
  3. 遇到b,和栈顶相同,弹出b → [a]
  4. 遇到a,和栈顶相同,弹出a → []
    栈为空,返回1,符合预期。

如果题目要求是消除所有连续出现≥2次的字符组(不管次数多少,只要连续≥2次就全部删除,合并后继续处理),那你的代码循环逻辑是对的,但核心错误在于:你不是先消除单个可消除组再合并字符,而是一次性过滤掉所有原字符串中长度≥2的组,这和“消除后合并产生新组再处理”的逻辑不符。比如abbaa,正确流程应该是先消除bb得到aaa,再消除aaa得到空,但你的代码直接过滤掉bb和aa,只保留a,导致错误结果。这种情况下,你需要调整代码,每次只处理当前字符串的连续组,拼接剩下的字符后进入下一轮循环,而不是一次性过滤所有原字符串的组(你的代码其实已经是这么做的,但如果测试用例是abbaa,正确结果本来就是0,可能你误解了测试用例的预期)。

总结

你当前的代码没有用到栈,且逻辑可能和题目要求的消除规则不符,导致输出错误。建议用上面的栈实现来处理相邻成对消除的场景,或者根据题目实际要求调整逻辑。

备注:内容来源于stack exchange,提问作者Gwizzly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:15:28