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

  • 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?