问题描述
小U拿到了一个通过特殊方式压缩的字符串,其中每个字母后面可能跟着一个数字,这个数字表示该字母在解压后的字符串中需要重复的次数。如果一个字母后面没有跟随数字,那么该字母在解压后的字符串中只出现一次。请帮助小U解压这个字符串并输出最终的解压结果。
测试样例
样例1:
输入:
s = "a2b3c4"输出:'aabbbcccc'
样例2:
输入:
s = "d5ef2"输出:'dddddeff'
样例3:
输入:
s = "x3y1z"输出:'xxxyz'
解题思路
要解压这个字符串,可以遍历每个字符,检查它后面是否跟有数字来确定重复次数。具体步骤:
-
初始化结果字符串:我们用一个空字符串来累积解压结果。
-
遍历字符串:遍历输入字符串的每个字符:
-
如果当前字符是字母,则记录它作为当前字符。
-
检查当前字符的后一个字符是否是数字:
- 如果是数字,则读取数字,表示该字符需要重复的次数。
- 如果不是数字,则默认重复次数为 1。
-
将解压后的字符追加到结果字符串中。
-
-
输出解压结果:遍历完成后,返回累积的结果字符串。
代码1.0
result = []
i = 0
while i < len(s):
char = s[i]
i += 1
repeat_count = 1
if i < len(s) and s[i].isdigit():
repeat_count = int(s[i])
i += 1
result.append(char * repeat_count)
return ''.join(result)
很不幸,没有通过测试.如下图所示:
显然不难看出,这是因为字符后面跟了一个不止一位数的数字,导致输出不符合预期.
经过AI辅组生产力代码2.0
def solution(s: str) -> str:
result = []
i = 0
while i < len(s):
# 当前字符是字母
char = s[i]
i += 1
# 检查该字母后是否有数字并读取完整的数字
repeat_count = 0
while i < len(s) and s[i].isdigit():
repeat_count = repeat_count * 10 + int(s[i])
i += 1
# 如果没有数字,默认重复次数为 1
if repeat_count == 0:
repeat_count = 1
# 将字符重复 repeat_count 次后加入结果列表
result.append(char * repeat_count)
return ''.join(result)
# 测试用例
if __name__ == '__main__':
print(solution("a2b3c4") == 'aabbbcccc') # True
print(solution("d5ef2") == 'dddddeff') # True
print(solution("x3y1z") == 'xxxyz') # True
print(solution("a12b0c3") == 'aaaaaaaaaaaaccc') # True
不过这次通过的测试点多了几个,出现了新的BUG:
这次的提示报错,可以看出忽略了对与数字0的特殊处理.
自己优化了代码3.0
def solution(s: str) -> str:
result = []
i = 0
while i < len(s):
# 当前字符是字母
char = s[i]
i += 1
# 检查该字母后是否有数字并读取完整的数字
repeat_count = 0
while i < len(s) and s[i].isdigit():
repeat_count = repeat_count * 10 + int(s[i])
i += 1
# 如果没有数字,默认重复次数为 1
if repeat_count == 0 and (i == len(s) or not s[i-1].isdigit()):
repeat_count = 1
# 如果重复次数不为 0,则将字符加入结果
if repeat_count > 0:
result.append(char * repeat_count)
return ''.join(result)
# 测试用例
if __name__ == '__main__':
print(solution("a2b3c4") == 'aabbbcccc') # True
print(solution("d5ef2") == 'dddddeff') # True
print(solution("x3y1z") == 'xxxyz') # True
激动的心,颤抖的手,Congratulations!解答通过!
总结
在解决字符串解压的问题时,AI 通过解析题目要求、帮助我设计算法步骤并指导优化过程。具体实现过程中,我的原始思路没有考虑到数字部分的多位数情况,AI 提醒我需要处理数字串的累积情况,避免出现误判。AI 推荐我使用一个 while 循环来处理数字部分,避免了手动解析每个数字字符,极大提升了代码的简洁性与效率。
最终,通过 AI 的帮助,我优化了代码并确保其能够正确处理多位数和边界条件,解决了问题并进一步理解了如何高效处理类似题目。