318. Maximum Product of Word Lengths

题目:

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.

Example 1:

Given ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]
Return 16
The two words can be "abcw", "xtfn".

Example 2:

Given ["a", "ab", "abc", "d", "cd", "bcd", "abcd"]
Return 4
The two words can be "ab", "cd".

Example 3:

Given ["a", "aa", "aaa", "aaaa"]
Return 0
No such pair of words.

链接: https://leetcode.com/problems/maximum-product-of-word-lengths/

题解:

给定一个String array,求出不含相同字符的两个单词长度乘积的最大值。

我们可以把这道题目分为几个步骤。

  1. 双重循环遍历Words
  2. 先把words[i]和words[j]放入一个<String, Set<Character>>的HashMap里
  3. 比较两者是否有重复, 假如没有重复,我们可以尝试更新max, 否则continue
  4. 最后返回max

这里题目给出单词只包含小写字母,所以我们还可以进一步优化空间复杂度。 另外,预先对数组按长度进行排序的话应该可以剪枝掉不少计算。 留给二刷了。

Java:

Time Complexity - O(n ^2), Space Complexity - O(n)

public class Solution {
    public int maxProduct(String[] words) {
        if (words == null || words.length < 2) {
            return 0;
        }
        int max = 0;
        Map<String, Set<Character>> map = new HashMap<>();

        for (int i = 0; i < words.length; i++) {
            addToMap(words[i], map);
            for (int j = i + 1; j < words.length; j++) {
                addToMap(words[j], map);
                if (!hasSameChar(words[i], words[j], map)) {
                    max = Math.max(max, words[i].length() * words[j].length());
                }
            }
        }
        return max;
    }

    private void addToMap(String word, Map<String, Set<Character>> map) {
        if (!map.containsKey(word)) {
            Set<Character> set = new HashSet<>();
            for (int i = 0; i < word.length(); i++) {
                set.add(word.charAt(i));
            }
            map.put(word, set);
        }
    }

    private boolean hasSameChar(String word1, String word2, Map<String, Set<Character>> map) {
        Set<Character> set1 = map.get(word1);
        Set<Character> set2 = map.get(word2);
        for (Character c : set1) {
            if (set2.contains(c)) {
                return true;
            }
        }
        return false;
    }
}

Reference:

https://leetcode.com/discuss/74589/32ms-java-ac-solution

时间: 2024-12-24 18:59:34

318. Maximum Product of Word Lengths的相关文章

318. Maximum Product of Word Lengths ——本质:英文单词中字符是否出现可以用26bit的整数表示

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0. Example

leetcode 318: Maximum Product of Word Lengths

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0. Example

318. Maximum Product of Word Lengths java solutions

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0. Example

318 Maximum Product of Word Lengths 最大单词长度乘积

给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且两个单词不含公共的字母.你可以认为每个单词只包含小写字母.如果不存在这样的两个单词,返回 0.示例 1:输入 ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]返回 16两个单词可以为 "abcw", "

Leetcode 318 Maximum Product of Word Lengths 字符串处理+位运算

先介绍下本题的题意: 在一个字符串组成的数组words中,找出max{Length(words[i]) * Length(words[j]) },其中words[i]和words[j]中没有相同的字母,在这里字符串由小写字母a-z组成的. 对于这道题目我们统计下words[i]的小写字母a-z是否存在,然后枚举words[i]和words[j],找出max{Length(words[i]) * Length(words[j]) }. 小写字母a-z是26位,一般统计是否存在我们要申请一个bool

Maximum Product of Word Lengths

Maximum Product of Word Lengths Total Accepted: 750 Total Submissions: 2060 Difficulty: Medium Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume tha

Maximum Product of Word Lengths -- LeetCode

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0. Example

leetcode笔记:Maximum Product of Word Lengths

一. 题目描述 Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.

【leetcode】Maximum Product of Word Lengths

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0. Example