class Solution:
def reorganizeString(self, S: str) -> str:
# 大顶堆
if len(S)<2:
return S
length = len(S)
# 使用库函数统计每个字符出现的次数
counts = collections.Counter(S)
# 记录最多出现的字符次数
maxCount = max(counts.items(),key=lambda x:x[1])[1]
# 如果最多出现的次数大于一半,肯定会相邻,返回空字符串
if maxCount > (length+1) // 2:
return ""
queue = [(-x[1],x[0]) for x in counts.items()]
# 这样每次弹出的都是最大的值
heapq.heapify(queue)
ans = list()
while len(queue)>1:
# 每次弹出最大的两个数字,将结果存到ans列表中
_,letter1 = heapq.heappop(queue)
_,letter2 = heapq.heappop(queue)
ans.extend([letter1,letter2])
# 计数均减1
counts[letter1] -= 1
counts[letter2] -= 1
# 只要当前结果还大于0,继续加入堆中
if counts[letter1] > 0:
heapq.heappush(queue,(-counts[letter1],letter1))
if counts[letter2] > 0:
heapq.heappush(queue,(-counts[letter2],letter2))
# 如果此时堆中还有一个,直接添加在最后
if queue:
ans.append(queue[0][1])
return "".join(ans)
09-28
1985
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交