問題
最長共通部分列問題です。
最長共通部分列問題については、以下の解説がとても分かりやすいです。
最長共通部分列問題 (Longest Common Subsequence)
回答
LTEで間に合わなかった回答
PyPy3を使えばこのコードでACになります。
import sys # input処理を高速化する input = sys.stdin.readline # 入力 S = input() T = input() def chmax(a, b): if a >= b: return a else: return b def lcs(s, t): dp = [[0 for i in range(len(T)+1)] for j in range(len(S)+1)] for i in range(len(S)): for j in range(len(T)): if S[i] == T[j]: dp[i+1][j+1] = chmax(dp[i+1][j+1], dp[i][j] + 1) dp[i+1][j+1] = chmax(dp[i+1][j+1], dp[i+1][j]) dp[i+1][j+1] = chmax(dp[i+1][j+1], dp[i][j+1]) ans = '' i = len(S) j = 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: ans += s[i-1] i -= 1 j -= 1 print(ans[::-1]) lcs(S, T)
Python3でacに辿り着いている他の回答は…
s = [ord(c) - 97 for c in input()]
と、文字をアスキーコードに変更することで高速化をしています。
何というか、すごいです。