この質問は、Googleのインタビューで私に尋ねられました。私はそれをすることができましたO(n * n)...私はより良い時間にそれをすることができますか?文字列は1と0でのみ形成できます。
意味:
XとYは、0または1で形成される文字列です。
D(X,Y)
= XとYの両方から最初に共通するものを削除します。次に、両方の文字列から残りの長さを追加します。
例えば
D(1111, 1000)
=最初のアルファベットのみが一般的です。したがって、残りの文字列は111
&000
です。したがって、結果length("111")
&length("000")
= 3 + 3 = 6
D(101, 1100)
=最初の2つのアルファベットのみが一般的です。したがって、残りの文字列は01
&100
です。したがって、結果length("01")
&length("100")
= 2 + 3 = 5
そのようなクレイジーな距離が直線的になることを知るのは明らかです。O(m)。
今の質問は
n個の入力が与えられた場合、次のように言います
1111
1000
101
1100
可能な最大の狂気の距離を見つけてください。
nは入力文字列の数です。mは、入力文字列の最大長です。
O(n 2 * m)の解は非常に簡単です。それはより良い方法で行うことができますか?mが固定されていると仮定しましょう。O(n ^ 2)よりもうまくこれを行うことができますか?