# 318-maximum-product-of-word-lengths Try it on leetcode ## 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.

 

Example 1:

Input: words = ["abcw","baz","foo","bar","xtfn","abcdef"]
Output: 16
Explanation: The two words can be "abcw", "xtfn".

Example 2:

Input: words = ["a","ab","abc","d","cd","bcd","abcd"]
Output: 4
Explanation: The two words can be "ab", "cd".

Example 3:

Input: words = ["a","aa","aaa","aaaa"]
Output: 0
Explanation: No such pair of words.

 

Constraints:

## Solution(Python) ```Python class Solution: def maxProduct(self, words: List[str]) -> int: return self.optimal(words) # Time Complexity: O(n^2*L) # Space Complexity: O(L) def bruteforce(self, words: List[str]) -> int: max_value = 0 for i, word1 in enumerate(words): for j, word2 in enumerate(words[i:]): if set(word1) ^ set(word2) == set(word1 + word2): value = len(word1) * len(word2) if value > max_value: max_value = value return max_value # Time Complexity: O(n^2) # Space Complexity: O(n) def optimal(self, words: List[str]) -> int: bits = [0 for i in range(len(words))] max_value = 0 for i in range(len(words)): for c in words[i]: bits[i] |= 1 << (ord(c) - 97) for i in range(len(bits)): for j in range(i + 1, len(bits)): if (bits[i] & bits[j]) == 0: value = len(words[i]) * len(words[j]) if value > max_value: max_value = value return max_value ```