318. Maximum Product of Word Lengths
Description
Given a string array words
, return the maximum value of length(word[i]) * length(word[j])
where the two words do not share common letters. If no such two words exist, return 0
.
Constraints
2 <= words.length <= 1000
1 <= words[i].length <= 1000
words[i]
consists only of lowercase English letters.
Approach
Links
Binarysearch
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input: words = ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]
Output: 16
Explanation: The two words can be "abcw", "xtfn".
Solutions
/**
* Time complexity :
* Space complexity :
*/
class Solution {
public int maxProduct(String[] words) {
if(words == null || words.length < 2) {
return 0;
}
int n = words.length;
int[] values = new int[n];
for(int i = 0; i < n; i++) {
String word = words[i];
for(int j = 0; j < word.length(); j++) {
values[i] |= (1 << word.charAt(j)-'a');
}
}
int maxLen = 0;
for(int i = 0; i < n; i++) {
for(int j = i+1; j < n; j++) {
if((values[i] & values[j]) == 0) {
maxLen = Math.max(maxLen, words[i].length()*words[j].length());
}
}
}
return maxLen;
}
}
Follow up
Last updated
Was this helpful?