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

LeetCode题目调试:Python函数未返回预期结果问题排查

问题分析:makeGood函数未返回预期结果且后续逻辑持续执行

问题描述

在LeetCode刷题时,编写的makeGood函数未返回预期结果,且执行时会继续运行后续不必要的逻辑。

原代码

def makeGood(s: str) -> str:
    print('fisrst s: ', s)
    s_list = list(s)
    for n in range(len(s)-1):
        print('n: ', n)
        if s[n].lower() == s[n+1].lower() and s[n] != s[n+1]:
            s_list.remove(s[n])
            s_list.remove(s[n + 1])
            print('list: ', len(s_list))
            s = ''.join(s_list)
            if len(s_list) == 0:
                print('00000')
                print(s)
                break
            else:
                makeGood(s)
    print('out')
    return s


res = makeGood("abBAcC")
print('res: ', res)

执行输出

fisrst s:  abBAcC
n:  0
n:  1
list:  4
fisrst s:  aAcC
n:  0
list:  2
fisrst s:  cC
n:  0
list:  0
00000

out
n:  1

原因解析

  1. 递归调用未传递结果
    当你在else分支调用makeGood(s)时,仅执行了递归函数,但没有接收或返回它的处理结果。上层函数会继续执行原循环逻辑,最终返回的是当前层修改后的s,而非递归处理后的最终空字符串。

  2. 循环范围固定,未动态更新
    for n in range(len(s)-1)的循环范围在函数启动时就已确定(基于初始字符串长度)。即使后续修改了s的长度,循环仍会按初始范围执行,导致多余的迭代(比如输出中最后的n: 1)。

  3. remove方法存在隐患
    s_list.remove(s[n])会删除列表中第一个匹配的元素,而非指定位置的元素。如果字符串存在重复字符,这会导致删除错误的元素,破坏预期的处理逻辑。

修正方案

方案1:修正递归逻辑

def makeGood(s: str) -> str:
    s_list = list(s)
    for n in range(len(s_list)-1):
        if s_list[n].lower() == s_list[n+1].lower() and s_list[n] != s_list[n+1]:
            # 精准删除相邻的两个目标元素
            del s_list[n:n+2]
            # 递归处理新字符串并直接返回结果
            return makeGood(''.join(s_list))
    # 无需要删除的元素,返回当前字符串
    return ''.join(s_list)

方案2:使用栈实现(更高效)

栈方法避免了递归的开销,逻辑更直观:

def makeGood(s: str) -> str:
    stack = []
    for char in s:
        # 检查栈顶元素与当前字符是否为大小写相反的同一字符
        if stack and stack[-1].lower() == char.lower() and stack[-1] != char:
            stack.pop()
        else:
            stack.append(char)
    return ''.join(stack)

修正说明

  • 递归方案中,找到匹配对后直接返回递归处理结果,终止当前层的后续循环,确保上层拿到最终处理后的字符串。
  • 使用del s_list[n:n+2]替代remove,精准删除指定位置的相邻元素,避免匹配错误。
  • 栈方案通过遍历一次字符串完成处理,时间复杂度为O(n),空间复杂度为O(n),效率更高。

内容的提问来源于stack exchange,提问作者user18176237

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:40:26