結果
| 問題 |
No.225 文字列変更(medium)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-06-13 14:26:33 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,070 ms / 5,000 ms |
| コード長 | 827 bytes |
| コンパイル時間 | 235 ms |
| コンパイル使用メモリ | 82,448 KB |
| 実行使用メモリ | 290,272 KB |
| 最終ジャッジ日時 | 2024-07-06 18:51:02 |
| 合計ジャッジ時間 | 12,041 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
def read_data():
n, m = map(int, input().split())
S = input().strip()
T = input().strip()
return n, m, S, T
memo = dict()
def f(a, b, S, T):
'''
f(a, b, S, T) S[:a] を T[:b] に変更するのに必要な最低ステップ数
'''
global memo
if (a, b) in memo:
return memo[a, b]
if a == 0:
return b
if b == 0:
return a
s = S[a - 1]
t = T[b - 1]
if s == t:
memo[a, b] = f(a-1, b-1, S, T)
return memo[a, b]
if s != t:
steps_change = 1 + f(a-1, b-1, S, T)
steps_insert = 1 + f(a, b-1, S, T)
steps_delete = 1 + f(a-1, b, S, T)
memo[a, b] = min(steps_change, steps_insert, steps_delete)
return memo[a, b]
if __name__ == '__main__':
n, m, S, T = read_data()
print(f(n, m, S, T))