2014. Longest Subsequence Repeated k Times (hard)

2021. 9. 21. 13:56Algorithm

    목차
반응형

s = "letsleetcode", k = 2

s에서 k번 반복하는 가장 긴 sub string을 찾아서 리턴

filtered = "".join(el*(freq//k) for el, freq in collections.Counter(s).items())

def dfs(n, sel, seq, res):
    if len(seq) == n:
        res.add(''.join(seq))
        return

    for i in range(len(filtered)):
        if i in sel:
            continue

        dfs(n, sel + [i], seq + [filtered[i]], res)

def is_subseq(sub, seq):
    seq = iter(seq)
    return all(c in seq for c in sub)

combs = set()
for i in range(1, len(filtered) + 1):
    dfs(i, [], [], combs)

combs = sorted(combs, key=lambda p: (len(p), p), reverse=True)

for c in combs:
    if is_subseq(c*k, s):
        return c

return ''

 

반응형