解压缩字符串 | 豆包Marscode AI 刷题

62 阅读3分钟

题目回顾

image.png

代码实现

def solution(s: str) -> str:
    result = ""  # 初始化结果字符串
    i = 0  # 初始化索引
    while i < len(s):  # 遍历字符串
        if s[i].isdigit():  # 如果当前字符是数字
            count = 0  # 初始化计数器
            while i < len(s) and s[i].isdigit():  # 继续读取数字直到非数字字符
                count = count * 10 + int(s[i])  # 将字符转换为数字并累加
                i += 1
            if count != 0:  # 如果计数器不为0
                result += result[-1] * (count - 1)  # 重复最后一个字符count-1次
            else:
                # 如果计数器为0,移除最后一个字符
                result = result[:-1]
        else:
            result += s[i]  # 如果当前字符不是数字,直接添加到结果字符串
            i += 1  # 移动到下一个字符
    return result

if __name__ == '__main__':
    print(solution("a2b3c4") == 'aabbbcccc')
    print(solution("d5ef2") == 'dddddeff')
    print(solution("x3y1z") == 'xxxyz')

题目分析

定义了一个函数,这个函数以一个字符串s作为输入参数。其主要目的是对输入的字符串进行处理,并最终返回经过解压操作后的字符串。

在函数的内部实现机制中,首先运用一个循环结构来逐个遍历输入的字符串。在遍历的过程中,借助isdigit()方法对当前正在处理的字符进行判断,以确定其是否为数字。如果当前字符被判定为数字,那么程序将持续读取后续连续出现的数字,这个过程会一直持续到遇到一个非数字字符为止。在读取完连续的数字后,将这些数字组合起来,转换为一个整数。这个整数在整个流程中的意义是表示某个字符需要重复的次数。紧接着,依据这个重复次数,将对应的字符重复相应的次数,并添加到结果字符串当中。

然而,如果当前正在处理的字符经过判断后确定不是数字,那么就直接将这个非数字字符添加到结果字符串里。

当对输入字符串的所有字符都完成上述处理流程后,函数最终返回经过解压处理后的字符串。

函数分析

代码结构分析

  1. 初始化
  • result = "":创建一个空字符串,用于存储最终的处理结果。

  • i = 0:初始化一个索引变量,用于遍历输入字符串 s。

  1. 主循环
  • while i < len(s)::开始一个循环,只要索引 i 小于输入字符串的长度,就继续执行循环体。
  1. 数字处理逻辑
  • if s[i].isdigit()::检查当前字符是否为数字。

  • count = 0:如果是数字,初始化一个计数器为 0。

  • while i < len(s) and s[i].isdigit()::这个内部循环用于读取连续的数字字符,并将其转换为整数累加到 count 中,同时移动索引 i。

  • if count!= 0::如果计数器不为 0,说明有数字需要处理。result += result[-1] * (count - 1) 这行代码会将结果字符串的最后一个字符重复 count - 1 一并添加到 result 中,实现根据数字重复前一个字符的功能。

  • else::如果计数器为 0,意味着要删除前一个字符,所以执行 result = result[:-1],通过切片操作移除结果字符串的最后一个字符。
  1. 非数字字符处理
  • else::如果当前字符不是数字,直接将其添加到结果字符串 result 中,并移动索引 i 到下一个字符。