この質問は、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)よりもうまくこれを行うことができますか?