[LeetCode 318] Maximum Product of Word Lengths

来源:互联网 发布:合肥飞恒网络 编辑:程序博客网 时间:2024/06/04 19:58

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.

Solution:

Use bit manipulation to mark if two words has shared character, then iterate to check max product

public int maxProduct(String[] words) {        int len = words.length;        if(len <=1 ) return 0;        int[] mask = new int[len];        for(int i=0;i<len;i++) {            for(int j=0;j<words[i].length();j++) {                mask[i] |= 1 << (words[i].charAt(j)-'a');            }        }        int max = 0;        for(int i=0;i<len;i++) {            for(int j=i+1;j<len;j++) {                if((mask[i] & mask[j]) == 0) {                    max = Math.max(max, words[i].length() * words[j].length());                }            }        }        return max;    }




1 0
原创粉丝点击