Maximum Product of Word Lengths

题目名称
318. Maximum Product of Word Lengths

分析
  这个问题首先要判断两个字符串是否包含相同的字符,如果不包含,则计算两个字符串长度的乘积;如果有相同的字符,则乘积为0。返回最大的乘积。
  因为字符串中的字符都是小写字母,从a-z总共26个,可以考虑用unsigned int类型的整数表示,unsigned int整数占32位内存,可以用第0位到第25为分别表示字母”a”到”z”,0表示字符串中没有该字母,1表示有。
  例如字符串”abcef”,用unsigned int(二进制)表示为:11101100 00000000 00000000 00000000。具体过程如下:

unsigned int letterMap = 0;
string str = "abcef";
//设立一个pos表示无符号整数的第1位是1,其余31位为0
//将pos右移相应位再与letterMap作"与"操作就把相应字母所在的位置为1。
unsigned int pos = 1<<31;
for(int i=0;i<str.size();i++){
    letterMap |= pos>>(str[i]-'a');
}

C++代码

class Solution {
public:
    int maxProduct(vector<string>& words) {
        int n=words.size();
        if(n<2) return 0;
        vector<unsigned int> bm(n,0);
        unsigned int pos = 1<<31;
        for(int i=0;i<n;i++) {
            for(int j=0;j<words[i].size();j++) {
                bm[i] |= pos>>(words[i][j]-'a');
            }
        }
        int res = 0;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                if((bm[i] & bm[j]) == 0){
                    int cur = words[i].size()*words[j].size();
                    res = max(res,cur);
                }
            }
        }
        return res;
    }
};

总结
  这里主要考察位操作,需要对位操作有比较深的了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值