Menu
CoddyTech

Longest Common Substring

ふつう動的計画法python iconjava iconcpp iconc iconjs icon+10

2つの文字列 s1 と s2 が与えられます。部分文字列とは、文字列から取り出した、文字が途切れずに並んだ部分のことで、たとえば clockwork の ork が該当します。s1 と s2 に共通する最長の部分文字列を見つけ、その長さを返してください。両方の文字列に共通する文字がない場合、答えは 0 です。

関数

longestCommonSubstring(s1: string, s2: string) → integer
s1string
最初の文字列
s2string
2つ目の文字列
戻り値integer
両方の文字列に含まれる最長の文字ブロックの長さ

制約

  • 1 ≤ s1.length ≤ 1000
  • 1 ≤ s2.length ≤ 1000
  • s1 と s2 は小文字の英字で構成されています。

例

入力
s1 = "clockwork"s2 = "workshop"
出力
4
説明
work は clockwork を閉じて workshop を開くため、長さ 4 の共通部分文字列であり、これより長いブロックは両方に現れません。
challenge icon

発展問題

ローリングハッシュを使って、指定した長さ L の共通部分文字列が存在するかどうかをおよそ O(n + m) 時間で判定し、その後 L について二分探索できますか?

コードをリセット
def longestCommonSubstring(s1, s2):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

s1 = "clockwork"
s2 = "workshop"

期待される出力

4