小S的字符串解压缩问题| 豆包MarsCode AI 刷题

96 阅读3分钟

image.png

解题思路

  1. 理解问题

    • 输入是一个压缩格式的字符串,包含字母和数字。
    • 数字表示紧随其后的字母出现的次数。
    • 如果字母前没有数字,表示该字母出现一次。
    • 目标是解压缩字符串,生成一个仅包含字母的字符串。

    思考

    • 需要识别字符串中的数字和字母。
    • 数字可能有多位,需要完整读取。
    • 字母前没有数字时,直接添加到结果中。
  2. 数据结构选择

    • 使用一个列表 output 来存储解压缩后的字符。
    • 使用一个指针 i 来遍历输入字符串 s

    思考

    • 列表 output 可以动态扩展,适合存储解压缩后的字符。
    • 指针 i 用于遍历字符串,方便处理每个字符。
  3. 算法步骤

    • 初始化一个空列表 output 和一个指针 i 为 0。

    • 遍历字符串 s

      • 如果当前字符 s[i] 是数字:

        • 找到完整的数字字符串 num_str
        • 将 num_str 转换为整数 num
        • 将紧随其后的字母重复 num 次,并添加到 output 中。
      • 如果当前字符 s[i] 是字母:

        • 直接将该字母添加到 output 中。
    • 最后,将 output 列表中的字符连接成一个字符串并返回。

    思考

    • 使用 while 循环遍历字符串 s,因为需要灵活控制指针 i 的移动。
    • 使用 isdigit() 方法判断字符是否为数字,简化判断逻辑。
    • 使用 int() 方法将数字字符串转换为整数,方便后续处理。
    • 使用 append() 方法将字符添加到 output 列表中,确保顺序正确。
    • 使用 join() 方法将 output 列表中的字符连接成一个字符串,提高效率。

代码框架

image.png

注意点

  • 在处理数字时,需要确保找到完整的数字字符串。

    • 思考:使用 while 循环继续读取数字字符,直到遇到非数字字符。
  • 在重复字母时,需要确保正确处理字母的重复次数。

    • 思考:使用 output[-1] * (num - 1) 来重复前一个字符,因为前一个字符已经添加了一次。
  • 最终返回的字符串需要将 output 列表中的字符连接起来。

    • 思考:使用 join() 方法将列表中的字符连接成一个字符串,避免手动拼接字符串的低效问题。

测试样例

  • 通过测试样例验证代码的正确性,确保能够处理不同长度的输入字符串和不同形式的压缩格式。

    • 思考:测试样例应覆盖单个字母、多个字母、单个数字、多个数字、无数字等多种情况。

总结

  • 通过遍历输入字符串,识别数字和字母,并根据数字重复字母,最终生成解压缩后的字符串。

    • 思考:算法的核心在于正确识别和处理数字,以及根据数字重复字母。