Leetcode: 471. Encode String with Shortest Length
Problem Statement
class Solution:
def encode(self, s: str) -> str:
N = len(s)
@cache
def dfs(i, j):
subs = s[i : j + 1]
best = subs
for k in range(i, j):
npart = k - i + 1
ncopy = len(subs) // npart
if len(subs) % npart == 0 and s[i : k + 1] * ncopy == subs:
cur = f"{ncopy}[{dfs(i, k)}]"
if len(cur) < len(best):
best = cur
for k in range(i, j):
cur = dfs(i, k) + dfs(k + 1, j)
if len(cur) < len(best):
best = cur
return best
return dfs(0, N - 1)
assert Solution().encode("aaa") == "aaa"
assert Solution().encode("aaaaa") == "5[a]"
assert Solution().encode("aaaaaaaaaa") == "10[a]"
class Solution:
def encode(self, s: str) -> str:
N = len(s)
@cache
def dfs(i, j):
if i == j:
return s[i]
if i > j:
return ""
ans = s[i : j + 1]
p = (ans + ans).find(ans, 1)
k = len(ans) // p
if k > 1:
x = f"{k}[{dfs(i, i + p-1)}]"
if len(x) < len(ans):
ans = x
for k in range(i, j):
x = dfs(i, k) + dfs(k + 1, j)
if len(x) < len(ans):
ans = x
return ans
return dfs(0, N - 1)