1. 程式人生 > >[leetcode][318. 最大單詞長度乘積]

[leetcode][318. 最大單詞長度乘積]

給定一個字串陣列 words,找到 length(word[i]) * length(word[j]) 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。

示例 1:

輸入: ["abcw","baz","foo","bar","xtfn","abcdef"]
輸出: 16 
解釋: 這兩個單詞為"abcw", "xtfn"

示例 2:

輸入: ["a","ab","abc","d","cd","bcd","abcd"]
輸出: 4 
解釋: 這兩個單詞為 "ab", "cd"

示例 3:

輸入: ["a","aa","aaa","aaaa"]
輸出: 0 解釋: 不存在這樣的兩個單詞。

用bit來表示字母是否存在即可,原理簡單

class Solution {
public:
    int maxProduct(vector<string>& words) {
        int size=words.size();
        vector<int> bit_value(size,0);
        for(int i=0;i<size;i++)
        {
            for(int j=0;j<words[i].size();j++)
            {
                bit_value[i] |= 1<<(words[i][j]-'a');
            } 
        }
        int tmp,result=0;
        for(int i=0;i<size;i++)
        {
            for(int j=i+1;j<size;j++)
            {
                if (!(bit_value[i]&bit_value[j]))
                {
                    tmp = words[i].size()*words[j].size();
                    result = tmp>result?tmp:result;
                }
            }
        }
        return result;
    }
};