前往此题

算法过程

  1. 创建两个指针anchor, write
    1. anchor指向连续字符串的起始位置,用于计算字符连续数量
    2. write 指向连续字符串的结尾,用于写入字符连续数量
  2. 遍历枚举整个字符串,同时生成read, c 两个变量
    1. read表示当前遍历字符的索引值,用于配合anchor计算字符连续数量以及计算连续字符段结束后对anchor指针重新定位
    2. c 指向遍历时的每个字符
  3. 当有了这些变量后就可以很方便的进行解题了,当重复字符段结束(遇到不同的字符),就需要执行写入了,先写入当前扫描的字符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