Skip to content

Commit 94f2e75

Browse files
authored
Update rearrange-string-k-distance-apart.py
1 parent d41b62c commit 94f2e75

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

Python/rearrange-string-k-distance-apart.py

+34-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,40 @@ def rearrangeString(self, s, k):
3535
import itertools
3636

3737

38+
# reference: https://codeforces.com/blog/entry/110184 1774B - Coloring
3839
class Solution2(object):
40+
def rearrangeString(self, s, k):
41+
"""
42+
:type str: str
43+
:type k: int
44+
:rtype: str
45+
"""
46+
if not k:
47+
return s
48+
cnts = collections.Counter(s)
49+
bucket_cnt = (len(s)+k-1)//k
50+
if not (max(cnts.itervalues()) <= bucket_cnt and cnts.values().count(bucket_cnt) <= (len(s)-1)%k+1):
51+
return ""
52+
result = [0]*len(s)
53+
i = 0
54+
for c in itertools.chain((c for c, v in cnts.iteritems() if v == bucket_cnt),
55+
(c for c, v in cnts.iteritems() if v <= bucket_cnt-2),
56+
(c for c, v in cnts.iteritems() if v == bucket_cnt-1)):
57+
for _ in xrange(cnts[c]):
58+
result[i] = c
59+
i += k
60+
if i >= len(result):
61+
i = i%k+1
62+
return "".join(result)
63+
64+
65+
# Time: O(n)
66+
# Space: O(n)
67+
import collections
68+
import itertools
69+
70+
71+
class Solution3(object):
3972
def rearrangeString(self, s, k):
4073
"""
4174
:type str: str
@@ -61,7 +94,7 @@ def rearrangeString(self, s, k):
6194
# Space: O(c)
6295
from collections import Counter
6396
from heapq import heappush, heappop
64-
class Solution3(object):
97+
class Solution4(object):
6598
def rearrangeString(self, s, k):
6699
"""
67100
:type str: str

0 commit comments

Comments
 (0)