def rearrange2(s, dist):
    start = 0
result = [None] * len(s)
for char, count in Counter(s).most_common():
    while result[start]:
        start += 1
end = start + dist * (count - 1) + 1
if end > len(s):
    return None
for i in range(start, end, dist):
    result[i] = char
return ''.join(result)
использование кучи помогает повысить производительность при перестановке строк