タイトルの意味は単語内部アレイが充填されて、二人は、このようなAとBさて、計算A.length(AS(単語自体は、FOO、テストとして文字の繰り返しを有することができる)重複文字の単語なしで互いを見つけます)*のb.length()最大。
アイデアは、ビットマップを使用することです。この記事を参照することができ、https://leetcode.com/problems/maximum-product-of-word-lengths/discuss/215611/Bit-solution-full-explanation-(javascript)-80-ms
次のように11行で、ビットマップを使用して、非常に巧妙な方法| =数回現れる各単語の各文字を識別します。18ワードラインときに、2つの相の結果が0である場合、時間は、オーバーラップし、二文字の単語が存在しないと判断されます。最大の利点は、ビットマップがすぐ前に、このような問題は内部の各文字のためのそのような言葉かどうかを判断することができるということです。
時間O(N) - N単語の数であります
スペースO(1) - のみ32ビットアレイ
1 / * * 2 * @param {ストリング[]}ワード 3 * @return {数} 4 * / 5 のvar maxProduct = 関数(ワード){ 6 VaRの最大値= 0 。 7 VaRのホルダー= 新しいアレイ(words.length).fill(0 )。 8 9 用(VAR ; iはwords.lengthを<I ++は、I = 0 ){ 10 用(VARの J = 0; J <ワード[I] .LENGTH; J ++ ){ 11 | = 1 <<(単語ホルダー[I] [I] .charCodeAt(J) - 97 )。 12 } 13 } 14 15 のvar LEN = words.length - 1 。 16 のための(VAR ; iがLEN <I ++は、I = 0 ){ 17 用(VARの J = I + 1、J <= LENあり、j ++ ){ 18 であれば((ホルダー[I]&ホルダー[J])=== 0 ){ 19 、最大= Math.max(最大、単語[I] .LENGTH * 単語[J] .LENGTH)。 20 } 21 } 22 } 23 24 リターンマックス。 25 }。