> For the complete documentation index, see [llms.txt](https://code-snippets.hbamithkumara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-snippets.hbamithkumara.com/leetcode/problems/301-400/maximum-product-of-word-lengths.md).

# 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
* [Leetcode](https://leetcode.com/problems/maximum-product-of-word-lengths/)
* ProgramCreek
* YouTube

### **Examples**

{% tabs %}
{% tab title="Example 1" %}
**Input:** words = \["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]

**Output:** 16

**Explanation:** The two words can be "abcw", "xtfn".
{% endtab %}

{% tab title="Example 2" %}
**Input:** words = \["a", "ab", "abc", "d", "cd", "bcd", "abcd"]

**Output:** 4

**Explanation:** The two words can be "ab", "cd".
{% endtab %}

{% tab title="Example 3" %}
**Input:** words = \["a", "aa", "aaa", "aaaa"]

**Output:** 0

**Explanation:** No such pair of words.
{% endtab %}
{% endtabs %}

### **Solutions**

{% tabs %}
{% tab title="Solution 1" %}

```java
/**
 * 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;
    }
}
```

{% endtab %}
{% endtabs %}

### **Follow up**

*
