Skip to content

Latest commit

 

History

History
133 lines (100 loc) · 5.54 KB

File metadata and controls

133 lines (100 loc) · 5.54 KB

压缩字符串(一)

last modify

压缩字符串(一)_牛客题霸_牛客网

问题简述
利用字符重复出现的次数, 编写一种方法, 实现基本的字符串压缩功能. 比如, 字符串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地址

[困难, 剑指Offer] 正则表达式匹配

[简单, LeetCode] 亲密字符串
[简单, LeetCode] 字符串中的单词数
[简单, 剑指Offer] 左旋转字符串
[简单, 剑指Offer] 替换空格
[简单, 牛客] 反转字符串
[简单, 牛客] 旋转字符串
[简单, 牛客] 最长公共前缀

滑动窗口 (7)

[中等, LeetCode] 找到字符串中所有字母异位词 🔥
[中等, LeetCode] 无重复字符的最长子串 🔥
[中等, 牛客] 最长无重复子数组

[困难, LeetCode] 最小覆盖子串 🔥
[困难, 剑指Offer] 滑动窗口的最大值
[困难, 牛客] 数组中的最长连续子序列
[困难, 牛客] 最小覆盖子串 🔥