318. Maximum Product of Word Lengths

Medium

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:

  • 2 <= words.length <= 1000

  • 1 <= words[i].length <= 1000

  • words[i] consists only of lowercase English letters.

解題

func maxProduct(words []string) int {
    m := make(map[int]int)
    ans := 0

    for _, word := range words {
        mask := 0
        for i := 0; i < len(word); i++ {
             mask |= 1 << (word[i] - 'a');
        }
        m[mask] = max(m[mask], len(word))

        for k, v := range m {
            if mask & k == 0 {
                ans = max(ans, len(word) * v)
            }
        }
    }

    return ans
}

func max(a, b int) int {
    if a > b { return a }
    return b
}

Last updated