
前往此题
算法过程
- 创建两个指针
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