Monday, January 1, 2018

[LeetCode]Rearrange String k Distance Apart


一般来讲越多的字符比越少的字符更加难排,所以每次我们要先排出现次数多的字符,我们用map和priority queue来追踪每个字符出现的数量和当前出现最多的字符。并且用另外一个queue来控制处于冷却区的字符,因为要保证相同的字符至少存在k的距离。这样就可以保证满足k distance的的情况下,每次取出现次数最多的字符。如果在某一步我们发现priority queue空了,说明我们不能做到,返回empty string。这个做法可以给我们正确的结果,但是和其他greedy做法一样,难点在于证明这个算法的正确性,笔者并没有想出来如何证明,也并没有google到如何证明其正确性。
时间复杂度O(n * log 26) = O(n),代码如下:


No comments:

Post a Comment