每日一题 2182. 构造限制重复的字符串(中等,贪心)

在这里插入图片描述
贪心,每次都尽量取大的,除非连续取的次数超出限制,此时取一个下一个字符

class Solution:
    def repeatLimitedString(self, s: str, repeatLimit: int) -> str:
        N = 26
        count = [0] * N
        for c in s:
            count[ord(c) - ord('a')] += 1
        ret = []
        i, j, m = N - 1, N - 2, 0
        while i >= 0 and j >= 0:
            if count[i] == 0: # 当前字符已经填完,填入后面的字符,重置 m
                m, i = 0, i - 1
            elif m < repeatLimit: # 当前字符未超过限制
                count[i] -= 1
                ret.append(chr(ord('a') + i))
                m += 1
            elif j >= i or count[j] == 0: # 当前字符已经超过限制,查找可填入的其他字符
                j -= 1
            else: # 当前字符已经超过限制,填入其他字符,并且重置 m
                count[j] -= 1
                ret.append(chr(ord('a') + j))
                m = 0
        return ''.join(ret)

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 17:12:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 17:12:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 17:12:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 17:12:01       18 阅读

热门阅读

  1. 如何为 glog 的宏重载 <<

    2024-01-16 17:12:01       37 阅读
  2. LeetCode刷题——394. 字符串解码(HOT100)

    2024-01-16 17:12:01       41 阅读
  3. 3588开发板配置rtc方法

    2024-01-16 17:12:01       31 阅读
  4. 2022年面经记录(base杭州)

    2024-01-16 17:12:01       32 阅读
  5. windows下本地启动rocketmq

    2024-01-16 17:12:01       35 阅读
  6. Day 48 动态规划 9

    2024-01-16 17:12:01       34 阅读
  7. WebGIS开发者入门

    2024-01-16 17:12:01       26 阅读