318. Maximum Product of Word Lengths

来源:互联网 发布:webservice 返回json 编辑:程序博客网 时间:2024/06/14 18:55

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. 

Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.

判断有没有重复的字母,比较巧妙的方法是对于这个单词的每一个字母ch,进行操作binary[i] |= (1 << (ch - 'a'));存储下来之后只需要判断(binary[i] & binary[j]) == 0。代码如下:

public class Solution {    public int maxProduct(String[] words) {        int[] binary = new int[words.length];        for (int i = 0; i < binary.length; i++) {            for (char ch: words[i].toCharArray()) {                binary[i] |= (1 << (ch - 'a'));            }        }        int max = 0;        for (int i = 0; i < binary.length; i++) {            for (int j = i + 1; j < binary.length; j++) {                if ((binary[i] & binary[j]) == 0) {                    max = Math.max(max, words[i].length() * words[j].length());                }            }        }        return max;    }}

原创粉丝点击