[leetcode][318. 最大單詞長度乘積]
阿新 • • 發佈:2018-12-13
給定一個字串陣列 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; } };