↓ 跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/
  5. 0300-0399/

0358 K 距离间隔重排字符串

Solution

from collections import Counter, deque
import heapq

class Solution:
    def rearrangeString(self, s: str, k: int) -> str:
        cnt = Counter(s)
        pq = [(-v, c) for c, v in cnt.items()]
        heapq.heapify(pq)
        q = deque()
        ans = []
        while pq:
            v, c = heapq.heappop(pq)
            ans.append(c)
            q.append((v + 1, c))
            if len(q) >= k:
                e = q.popleft()
                if e[0]:
                    heapq.heappush(pq, e)
        return "" if len(ans) < len(s) else "".join(ans)

# 本地测试
if __name__ == "__main__":
    sol = Solution()
    print(sol.rearrangeString("aabbcc", 3)) # "abcabc"
    print(sol.rearrangeString("aaabc", 3))  # ""
    print(sol.rearrangeString("aaadbbcc", 2)) # "abacabcd"