日期:2026年1月21日
ZeroJudge 題目連結:c001. 10405 - Longest Common Subsequence
解題想法
只要找最長共同子序列 (longest common subsequence, LCS) 的長度,用二維串列 dp 儲存兩個字串 s, t 的第 i 個、第 j 個字母對應的 LCS 長度。
Python 程式碼
使用時間約為 24 ms,記憶體約為 3 MB,通過測試。
import sys
def length_LCS(s, t):
m, n = len(s), len(t)
dp = [[0]*(n+1) for _ in range(m+1)]
for i in range(1, m+1):
for j in range(1, n+1):
if s[i-1] == t[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
return dp[m][n]
result = []
lines = sys.stdin.readlines()
idx = 0
while idx < len(lines):
if not lines[idx].strip():
idx += 1
continue
a = lines[idx].strip()
idx += 1
b = lines[idx].strip()
idx += 1
ans = length_LCS(a, b)
result.append(f"{ans:d}\n")
sys.stdout.write("".join(result))