Given a string arraywords
, find the maximum value oflength(word[i]) * length(word[j])
where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.
Example 1:
Input:
["abcw","baz","foo","bar","xtfn","abcdef"]
Output:
16
Explanation:
The two words can be
"abcw", "xtfn"
.
Example 2:
Input:
["a","ab","abc","d","cd","bcd","abcd"]
Output:
4
Explanation:
The two words can be
"ab", "cd"
.
Example 3:
Input:
["a","aa","aaa","aaaa"]
Output:
0
Explanation:
No such pair of words.
tag: bitwise
class Solution {
public int maxProduct(String[] words) {
if (words == null || words.length == 0) return 0;
int n = words.length;
int[] values = new int[n];
for (int i = 0; i < n; i++){
String word = words[i];
values[i] = 0;
for (char c : word.toCharArray()){
values[i] |= 1 << (c - 'a');
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = i + 1; j < n; j++){
if ( (values[i] & values[j]) == 0 && words[i].length() * words[j].length() > ans) ans = words[i].length() * words[j].length();
}
}
return ans;
}
}