8.21 - hard - 74

358. Rearrange String k Distance Apart

这道题就是把所有值都进行最大区分,在重新加入heap的时候要注意,如果两个值有同样的count,那么后访问过的要先加进去,比如说bba, size=1,先加入b,此时a,b的count都是1,这时候要先加入a,再加入b

class Solution(object):
    def rearrangeString(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        if k == 0:
            return s
        h = {}
        for c in s:
            h[c] = h.get(c, 0) + 1
        
        heap = []
        for key, val in h.iteritems():
            heapq.heappush(heap, [-val, key])
        
        res = []
        
        while heap:
            temp = []
            n = len(s) - len(res)
            for _ in range(min(k, n)):
                if not heap:
                    return ""
                cur_val, key = heapq.heappop(heap)
                res.append(key)
                cur_val += 1
                if cur_val != 0:
                    temp.append([cur_val, key])
            
            while temp:
                heapq.heappush(heap, temp.pop())
        
        return "".join(res)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,900评论 0 33
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,421评论 3 52
  • “好了,别哭了,男子汉大丈夫的,做正事要紧!”,说着便把一张硬纸皮做的入学申请递给他,“去到门卫室那里递上这...
    韩轩彬少阅读 424评论 0 3
  • 今天,是我生命中独一无二仅有的一天,如果一切如我所愿,在未来我将还有19746天,在一去不复返的金天里,天气转凉。...
    明月心如我阅读 176评论 0 0

友情链接更多精彩内容