This documentation is automatically generated by online-judge-tools/verification-helper
最長共通部分列を求めるアルゴリズム。
lcs(s: str, t: str) -> str
長さ $N$ の文字列 s
と長さ $M$ の文字列 t
の最長共通部分列を返す。計算量 $O(NM)$
def lcs(s, t):
dp = [[0] * (len(t) + 1) for _ in range(len(s) + 1)]
for i, chr_s in enumerate(s):
for j, chr_t in enumerate(t):
if chr_s == chr_t:
dp[i + 1][j + 1] = dp[i][j] + 1
else:
dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j])
res = []
i, j = len(s), len(t)
while i > 0 and j > 0:
if dp[i][j] == dp[i - 1][j]:
i -= 1
elif dp[i][j] == dp[i][j - 1]:
j -= 1
else:
res.append(s[i - 1])
i -= 1
j -= 1
return ''.join(reversed(res))
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/python.py", line 96, in bundle
raise NotImplementedError
NotImplementedError