题解-字符串解压缩问题 | 豆包MarsCode AI刷题

86 阅读4分钟

题目解析

在这道题中,我们的目标是将包含字母和数字的压缩字符串解压。每个字母后可能跟着一个数字,表示该字母在解压后需要重复的次数。如果字母后面没有数字,则该字母只出现一次。举例来说:

  • 输入 "a2b3c4" 应解压为 "aabbbcccc"
  • 输入 "w40" 应解压为 40 个 w
解题思路
  1. 遍历字符串:逐个字符进行扫描,识别字母和数字。
  2. 读取数字:每次遇到字母时检查是否有数字跟在后面,读取并转换为整数表示重复次数。
  3. 默认重复次数:如果一个字母后没有数字,则默认重复一次。
  4. 组装解压字符串:根据解析到的字母和重复次数,将其添加到结果字符串。

图解

假设输入为 "urjuu4w40pxl",解压过程如下:

位置字符后续数字重复次数结果
0u1u
1r1ur
2j1urj
3u44urjuuuu
5w4040urjuuuuw...w(共40个w)
9p1urjuuuuw...wpx
10x1urjuuuuw...wpx
11l1urjuuuuw...wpxl

最终解压结果为:"urjuuuuuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpxl"

代码实现与详解

下面是完整的 Python 实现,支持多位数字的解析:

def solution(s: str) -> str:
    result = ""
    i = 0
    
    while i < len(s):
        char = s[i]
        repeat_count = 1  # 默认重复次数为 1
        
        # 检查后续字符是否是数字(可能是多位数)
        j = i + 1
        while j < len(s) and s[j].isdigit():
            j += 1
        
        # 如果存在数字,提取并转换为整数
        if j > i + 1:
            repeat_count = int(s[i + 1:j])
        
        # 按重复次数添加字符
        result += char * repeat_count
        i = j  # 移动到下一个非数字字符

    return result

# 测试用例
if __name__ == '__main__':
    print(solution("a2b3c4") == 'aabbbcccc')      # 预期输出: aabbbcccc
    print(solution("d5ef2") == 'dddddeff')        # 预期输出: dddddeff
    print(solution("x3y1z") == 'xxxyz')           # 预期输出: xxxyz
    print(solution("urjuu4w40pxl") == 'urjuuuuuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpxl')  # 预期输出
代码详解
  1. 初始化变量result 用于保存最终解压结果,i 为当前扫描位置。
  2. 循环解析字符
    • 每次遇到字母,将其存入 char,然后检查该字母后是否有数字。
    • 使用 j 索引读取连续的数字字符,解析成 repeat_count
    • 根据 repeat_countchar 重复相应次数后添加到 result
  3. 移动索引:每次将 i 移动到下一个字母位置,确保所有字符被解析。

知识总结

  1. 字符串解析:在这道题中,需要通过循环和索引控制来解析字符串中不同类型的数据,解析字母和数字的组合。
  2. 多位数字解析:考虑到数字可能包含多位,使用 isdigit() 检查并连续读取数字字符,确保不漏掉任何部分。
  3. 字符串操作的性能:在需要频繁构造字符串时,通过逐个字符添加而不是直接拼接可以避免过多的性能消耗。+= 的用法也是提升代码性能的一部分。

工具运用

在 MarsCode AI 刷题过程中,结合一些其他资源可以更有效地提升编程技能:

  1. 利用题目解析:在遇到思路不清的问题时,先尝试自己解决,再通过 MarsCode AI 的题目解析进行对比。查看 AI 提供的思路和代码实现,找出自己实现中的不足。
  2. 图解辅助:使用图解帮助理解复杂的解析步骤,例如在解析字符串时画出索引和字符的对应关系,更直观地看到代码执行的顺序。
  3. 与代码库结合:MarsCode AI 提供了丰富的题库和解析,可以将自己完成的题目和错题按难度和知识点分类,形成个人代码库,作为日后复习和参考的资料。

总结

通过 MarsCode AI 刷题平台完成字符串解压缩问题,学会了字符串解析和多位数处理的技巧。结合 AI 辅助和自我总结,能够系统性地提升编程能力。希望这些经验能够帮助其他初学者更好地掌握编程技巧,在解决问题中不断进步。