給定乙個字串陣列 words,找到 length(word[i]) * length(word[j]) 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。
示例 1:
輸入:
["abcw"
,"baz"
,"foo"
,"bar"
,"xtfn"
,"abcdef"
]輸出:
16
解釋: 這兩個單詞為 「abcw」, 「xtfn」。
示例 2:
輸入:
["a"
,"ab"
,"abc"
,"d"
,"cd"
,"bcd"
,"abcd"
]輸出:
4
解釋: 這兩個單詞為 「ab」, 「cd」。
示例 3:
輸入:
["a"
,"aa"
,"aaa"
,"aaaa"
]輸出:
0
解釋: 不存在這樣的兩個單詞。
解題
基本思路:兩兩比較,並判斷每兩個單詞之間是否有公共子字元,更新最大長度;
優化1:
判斷公共子字元:位運算
對每個字串計算掩碼,tmp|=1<<(ch-'a')
;得到的位為1則含有該字元;
判斷兩個字串是否有公共子字元掩碼1&掩碼2==0
則無公共字元;
優化2:
事先計算每個字串的掩碼,儲存;
優化3:
建立map,儲存掩碼:該掩碼的最長字串;
去除字元相同的短字串;
class
solution
if(map.
find
(tmp)
==map.
end(
)||map[tmp]
.length()
length()
) map[tmp]
=s;}
int len=0;
for(
auto t:map)
for(
auto f:map)
return len;
}private
: unordered_map<
int,string> map;
};
318 最大單詞長度乘積
給定乙個字串陣列 words,找到 length word i length word j 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。示例 1 輸入 abcw baz foo bar xtfn abcdef 輸出 16 解釋 這兩個...
leetcode 318 最大單詞長度乘積
給定乙個字串陣列words,找到length word i length word j 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。示例 1 輸入 abcw baz foo bar xtfn abcdef 輸出 16解釋 這兩個單詞為...
leetcode318 最大單詞長度乘積
給定乙個字串陣列words,找到length word i length word j 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。示例 1 輸入 abcw baz foo bar xtfn abcdef 輸出 16解釋 這兩個單詞為...