题目回顾
代码实现
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()方法对当前正在处理的字符进行判断,以确定其是否为数字。如果当前字符被判定为数字,那么程序将持续读取后续连续出现的数字,这个过程会一直持续到遇到一个非数字字符为止。在读取完连续的数字后,将这些数字组合起来,转换为一个整数。这个整数在整个流程中的意义是表示某个字符需要重复的次数。紧接着,依据这个重复次数,将对应的字符重复相应的次数,并添加到结果字符串当中。
然而,如果当前正在处理的字符经过判断后确定不是数字,那么就直接将这个非数字字符添加到结果字符串里。
当对输入字符串的所有字符都完成上述处理流程后,函数最终返回经过解压处理后的字符串。
函数分析
代码结构分析
- 初始化:
-
result = "":创建一个空字符串,用于存储最终的处理结果。
-
i = 0:初始化一个索引变量,用于遍历输入字符串 s。
- 主循环:
- while i < len(s)::开始一个循环,只要索引 i 小于输入字符串的长度,就继续执行循环体。
- 数字处理逻辑:
-
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],通过切片操作移除结果字符串的最后一个字符。
- 非数字字符处理:
- else::如果当前字符不是数字,直接将其添加到结果字符串 result 中,并移动索引 i 到下一个字符。