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

AB压缩字符串展开代码修复:无数字后缀字符默认重复1次

修复字符串解压逻辑,支持无数字后缀的默认重复1次

我来帮你搞定这个字符串解压的问题!你的现有代码核心逻辑没问题,但存在两个小缺陷:一是处理最后一个无数字后缀的字符时会有索引越界风险,二是分支判断可以更简洁统一。下面是优化后的解决方案:

修改后的完整代码

def extensao(seq):
    new_seq = ""
    i = 0
    len_seq = len(seq)  # 提前存好字符串长度,避免重复计算
    while i < len_seq:
        if seq[i] == '(':
            # 提取括号内的子串
            it = i + 1
            exp = ""
            while it < len_seq and seq[it] != ')':
                exp += seq[it]
                it += 1
            it += 1  # 跳过右括号
            
            # 提取重复次数:有数字取数字,无则默认1
            num = ""
            while it < len_seq and seq[it].isdigit():
                num += seq[it]
                it += 1
            repeat_times = int(num) if num else 1
            
            new_seq += exp * repeat_times
            i = it
        else:
            # 处理单个A/B字符
            char = seq[i]
            it = i + 1
            
            # 同样处理重复次数
            num = ""
            while it < len_seq and seq[it].isdigit():
                num += seq[it]
                it += 1
            repeat_times = int(num) if num else 1
            
            new_seq += char * repeat_times
            i = it
    return new_seq

def main():
    seq = input("Escreva uma sequencia: ")
    final_seq = extensao(seq)
    print(final_seq)

main()

关键优化说明

  1. 统一重复次数处理逻辑:不管是括号后的数字还是单个字符后的数字,都先提取数字串;如果没有数字,就默认重复1次,彻底解决了原代码中分支判断的冗余问题。
  2. 避免索引越界:所有访问seq[it]的操作前都加了it < len_seq的判断,比如处理最后一个无数字后缀的字符时,不会因为it超出字符串长度而报错。
  3. 简化拼接操作:用Python原生的字符串乘法(比如exp * repeat_times)代替原有的while循环拼接,代码更简洁高效。

测试验证

输入示例中的(BA)4B5A,输出结果为:BABABABABBBBBA,完全符合你的预期。

内容的提问来源于stack exchange,提问作者Bárbara Fonseca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:42