字符串压缩问题Python代码优化咨询:仅通过4/13测试用例
问题描述
给定一个数字字符串,若字符'c'连续出现X次,则将该连续出现的字符替换为(X,c)。
输入输出格式
- 输入格式:单行输入目标字符串
- 输出格式:单行输出修改后的字符串
示例
- 输入:
1222311 - 输出:
(1, 1) (3, 2) (1, 3) (2, 1)
我的实现
我编写了如下Python代码:
def pri(l): print(f"({l[0]}, {l[1]})",end=" ") s = input() lis = [1,s[0]] for i in range(len(s)): fr = 1 if i<len(s)-1: if s[i+1] != s[i]: pri(lis) lis = [1,s[i+1]] else: lis[0] += 1 if s[i] == s[len(s)-1]: pri(lis) break else: lis = [1,s[i]] pri(lis)
但该代码仅能通过13个测试用例中的4个,请问如何优化这段代码以通过全部测试?
问题分析与优化
你的代码存在三个关键问题:
- 提前终止循环的错误判断:在连续字符的分支中,
if s[i] == s[len(s)-1]的判断会导致当当前字符和最后一个字符相同时,提前中断计数过程,比如输入aaaa时会错误输出(2, a)而非(4, a)。 - 最后一个字符的重复处理:循环到最后一个字符时重新初始化
lis,会覆盖之前的连续计数逻辑,存在潜在错误风险。 - 输出末尾多余空格:每次打印使用
end=" "会导致输出字符串末尾多一个空格,不符合题目严格的格式要求。
优化后的代码
调整逻辑,持续计数连续字符,统一收集结果后再格式化输出:
s = input().strip() if not s: print("") exit() result = [] current_char = s[0] count = 1 for char in s[1:]: if char == current_char: count += 1 else: result.append(f"({count}, {current_char})") current_char = char count = 1 # 处理最后一组未记录的连续字符 result.append(f"({count}, {current_char})") # 用空格拼接结果,自动避免末尾多余空格 print(" ".join(result))
代码说明
- 先处理空字符串的边界情况,避免索引错误。
- 初始化当前字符和计数,从第二个字符开始遍历字符串。
- 遇到相同字符则计数累加,遇到不同字符则将当前组结果存入列表,重置计数和当前字符。
- 遍历结束后,将最后一组连续字符的结果加入列表。
- 用
" ".join()拼接所有结果,确保输出格式符合要求,无末尾多余空格。
内容的提问来源于stack exchange,提问作者Blue
相关产品推荐
相关产品推荐

