前往此题
算法过程
- 创建两个指针
anchor
, write
。
anchor
指向连续字符串的起始位置,用于计算字符连续数量
write
指向连续字符串的结尾,用于写入字符连续数量
- 遍历枚举整个字符串,同时生成
read
, c
两个变量
read
表示当前遍历字符的索引值,用于配合anchor
计算字符连续数量以及计算连续字符段结束后对anchor
指针重新定位
c
指向遍历时的每个字符
- 当有了这些变量后就可以很方便的进行解题了,当重复字符段结束(遇到不同的字符),就需要执行写入了,先写入当前扫描的字符
anchor
,然后再统计数量digit
,写在下一位,如果遇到两位数以上的digit
需要遍历拆开写入进去。如此往复
代码
class Solution(object):
def compress(self, chars):
anchor = write = 0
for read, c in enumerate(chars):
if read + 1 == len(chars) or chars[anchor] != chars[read + 1]:
chars[write] = chars[anchor]
write += 1
if read > anchor:
for digit in str(read - anchor + 1):
chars[write] = digit
write += 1
anchor = read + 1
return write