LeetCode 318. Maximum Product of Word Lengths (状态压缩)

题目大意:给出一些字符串,找出两个不同的字符串之间长度之积的最大值,但要求这两个字符串之间不能拥有相同的字符。(字符只考虑小写字母)。

题目分析:字符最多只有26个,因此每个字符串可以用一个二进制数来表示它含有哪些字符。

 

代码如下:

class Solution {
public:
    int maxProduct(vector<string>& words) {
        int maxn=0;
        int *Bit=new int[words.size()];
        fill(Bit,Bit+words.size(),0);
        for(int i=0;i<words.size();++i){
            int t=0;
            for(int j=0;j<words[i].size();++j)
                Bit[i]|=(1<<(words[i][j]-'a'));
            for(int j=0;j<i;++j){
                if(Bit[i]&Bit[j]) continue;
                maxn=max(maxn,(int)(words[i].size()*words[j].size()));
            }
        }
        delete []Bit;
        return maxn;
    }
};

  

posted @ 2016-02-02 22:58  20143605  阅读(391)  评论(0编辑  收藏  举报