[規格-9251]LCS
に答える
写真の出所:https://myjamong.tistory.com/317
ACAYKPとCAPCAKを例にとると、前の文のサブシーケンスがaで、後の文のサブシーケンスがbであれば、
a:A
b:CA
2つの文字列で作成可能なLCSの長さ:1
a:A
b:CA
2つの文字列で作成可能なLCSの長さ:1
...以上のように、bが1つ増えるごとにLCSの長さを求め、bが増加するとaが1つ増え、上記のようにLCSの長さを求める.
a:AC
b:C
2つの文字列で作成可能なLCSの長さ:1
a:AC
b:CA
2つの文字列で作成可能なLCSの長さ:1
aとbに同じ文字が追加された場合、aとbに文字が追加される前に、LCSの長さに+1を加えた値が追加された文字のLCSの長さに等しい.
dp[i][j]=dp[i-1][j-1]+1
aとbに追加された文字が異なる場合、既存の所与の文字列の最大長をLCS長とすることができる.
dp[i][j]=max(dp[i-1][j],dp[i][j-])
コード#コード#
import sys
input = sys.stdin.readline
s1=input().strip()
s2=input().strip()
dp=[[0]*(len(s2)+1) for _ in range(len(s1)+1)]
for i in range(1,len(s1)+1):
for j in range(1,len(s2)+1):
if s1[i-1]==s2[j-1]:
dp[i][j]=dp[i-1][j-1]+1
else:
dp[i][j]=max(dp[i-1][j],dp[i][j-1])
print(dp[-1][-1])
実行時間:712ミリ秒
Reference
この問題について([規格-9251]LCS), 我々は、より多くの情報をここで見つけました https://velog.io/@sue06004/백준-9251-LCSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol