美文网首页
8.21 - hard - 74

8.21 - hard - 74

作者: 健时总向乱中忙 | 来源:发表于2017-08-22 00:59 被阅读0次

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)

相关文章

  • 8.21 - hard - 74

    358. Rearrange String k Distance Apart 这道题就是把所有值都进行最大区分,在...

  • 8.21 - hard - 79

    407. Trapping Rain Water II 利用外围边界,依次朝里面找,只是新加入heap的值需要取其...

  • 8.21 - hard - 80

    410. Split Array Largest Sum 有两种解法: 按值二分: 左边界是array里的最大值,...

  • 8.21 - hard - 72

    352. Data Stream as Disjoint Intervals 有序的几个重要数据结构和算法:hea...

  • 8.21 - hard - 73

    354. Russian Doll Envelopes 简单的DP的话,会TLE,worst case O(n^2...

  • 8.21 - hard - 75

    363. Max Sum of Rectangle No Larger Than K 如果是求最大值,用for l...

  • 8.21 - hard - 76

    381. Insert Delete GetRandom O(1) - Duplicates allowed 设计...

  • 8.21 - hard - 77

    391. Perfect Rectangle 找出四个边角点。 所有的小矩形面积和等于大矩形面积 除了四个边角点,...

  • 8.21 - hard - 78

    403. Frog Jump首先做出来一个TLE的版本,因为这里面要search三种情况,可以用记忆化搜索来做。

  • 我的生日,不想和任何人分享

    8.21

网友评论

      本文标题:8.21 - hard - 74

      本文链接:https://www.haomeiwen.com/subject/cvkkdxtx.html