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

处理嵌套括号字符反转时出现IndexError,请求排查解决

括号内字符反转并移除括号的代码错误排查

题目背景与要求

朋友给Alexey发了一条加密消息,需将消息中括号()内的字符反转后删除括号,输入字符串括号格式合法且支持嵌套。

  • 输入:含成对括号的字符串,长度0<x≤50
  • 输出:括号内字符反转且移除括号后的字符串

示例:

  • 输入:asd(asd) → 输出:asddsa
  • 输入:foo(bar)asd(asd) → 输出:foorabasddsa
  • 输入:fit((tif)) → 输出:fittif

我的实现代码

def reverse_inside_brackets(s):
    if not s:
        return s
    if s[0] == '(':        
        i = 1
        count = 1
        while count > 0:
            if s[i] == '(':
                count += 1
            elif s[i] == ')':
                count -= 1
            i += 1        
        inside = s[1:i]
        reversed_inside = reverse_inside_brackets(inside)
        return s[0] + reversed_inside + s[i]
    else:
        return s[0] + reverse_inside_brackets(s[1:])


l = input()
print(reverse_inside_brackets(l))

错误信息

IndexError                                Traceback (most recent call last)
Cell In[17], line 2
      1 l = input()
----> 2 print(reverse_inside_brackets(l))

Cell In[16], line 19, in reverse_inside_brackets(s)
     17     return s[0] + reversed_inside + s[i]
     18 else:
---&gt; 19     return s[0] + reverse_inside_brackets(s[1:])

Cell In[16], line 19, in reverse_inside_brackets(s)
     17     return s[0] + reversed_inside + s[i]
     18 else:
---&gt; 19     return s[0] + reverse_inside_brackets(s[1:])

Cell In[16], line 19, in reverse_inside_brackets(s)
     17     return s[0] + reversed_inside + s[i]
     18 else:
---&gt; 19     return s[0] + reverse_inside_brackets(s[1:])

Cell In[16], line 17, in reverse_inside_brackets(s)
     15     inside = s[1:i]
     16     reversed_inside = reverse_inside_brackets(inside)
---&gt; 17     return s[0] + reversed_inside + s[i]
     18 else:
     19     return s[0] + reverse_inside_brackets(s[1:])

IndexError: string index out of range

问题分析与解决

错误原因

  1. 索引越界:循环中找到闭合括号后,i会自增到闭合括号的下一个位置,此时s[i]超出字符串的索引范围(例如输入(asd),字符串长度为5,索引最大为4,但i最终为5,访问s[5]就会报错)。
  2. 逻辑不符合需求:
    • 代码保留了原括号(返回s[0]左括号和s[i]相关内容),但题目要求删除括号。
    • 未对括号内处理后的内容执行反转操作,不符合“括号内字符反转”的要求。

修正方案

  • 找到闭合括号的准确位置:循环结束后,i-1就是闭合括号的索引,括号内的内容为s[1:i-1]。
  • 对括号内递归处理后的结果进行反转,然后拼接后续未处理字符串的递归结果,不再保留原括号。
  • 非括号字符直接保留,递归处理剩余内容。

修正后的代码

def reverse_inside_brackets(s):
    if not s:
        return s
    if s[0] == '(':
        i = 1
        count = 1
        while count > 0:
            if s[i] == '(':
                count += 1
            elif s[i] == ')':
                count -= 1
            i += 1
        # 处理括号内的内容,然后反转
        processed_inside = reverse_inside_brackets(s[1:i-1])
        reversed_inside = processed_inside[::-1]
        # 拼接反转后的内容和后续处理结果,不保留括号
        return reversed_inside + reverse_inside_brackets(s[i:])
    else:
        # 非括号字符直接保留,处理剩余部分
        return s[0] + reverse_inside_brackets(s[1:])

l = input()
print(reverse_inside_brackets(l))

验证示例

  1. 输入asd(asd):处理括号内asd→反转成dsa,拼接后得到asddsa,符合预期。
  2. 输入fit((tif)):先处理内层(tif)→反转成fit,外层括号内内容为fit→反转成tif,最终得到fittif,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:34