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次,彻底解决了原代码中分支判断的冗余问题。
- 避免索引越界:所有访问
seq[it]的操作前都加了it < len_seq的判断,比如处理最后一个无数字后缀的字符时,不会因为it超出字符串长度而报错。 - 简化拼接操作:用Python原生的字符串乘法(比如
exp * repeat_times)代替原有的while循环拼接,代码更简洁高效。
测试验证
输入示例中的(BA)4B5A,输出结果为:BABABABABBBBBA,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Bárbara Fonseca
相关产品推荐
相关产品推荐

