利用字符重复出现的次数, 编写一种方法, 实现基本的字符串压缩功能. 比如, 字符串aabcccccaaa会变为a2bc5a3.
1.如果只有一个字符, 1不用写
2.字符串中只包含大小写英文字母 (a至z).- 定义窗口
[l, r](闭区间); - 当
s[l] == s[r]时, 移动r; 否则, 添加s[l]和r - l到结果, 并将l移动到r位置, 开启下一个窗口; - 注意最后一个窗口,
r的循环区间应该是[0, N], 而不是[0, N-1], 所以在判断s[l] == s[r]时要注意边界;
Python
class Solution:
def compressString(self , s ):
if not s: return ''
N = len(s)
ret = []
l, r = 0, 0
while r <= N: # r 需要遍历到最后一个字符的下一个位置
# 当不满足条件时, 直接移动 l 到 r, 不需要 while 判断
if r == N or s[l] != s[r]: # 注意判断顺序
ret.append(s[l])
if r > l + 1:
ret.append(str(r - l))
l = r
r += 1
return ''.join(ret)其他算法笔记
字符串 (16)
[中等, LeetCode] 电话号码的字母组合 🔥
[中等, 剑指Offer] 把字符串转换成整数 🔥
[中等, 剑指Offer] 表示数值的字符串
[中等, 牛客] 大数乘法
[中等, 牛客] 大数加法
[中等, 牛客] 把字符串转换成整数(atoi) 🔥
[中等, 牛客] 比较版本号
[中等, 牛客] 验证IP地址[简单, LeetCode] 亲密字符串
[简单, LeetCode] 字符串中的单词数
[简单, 剑指Offer] 左旋转字符串
[简单, 剑指Offer] 替换空格
[简单, 牛客] 反转字符串
[简单, 牛客] 旋转字符串
[简单, 牛客] 最长公共前缀