318. 最大单词长度乘积 Maximum Product of Word Lengths

题目 <https://leetcode-cn.com/problems/maximum-product-of-word-lengths/>

26个字母,正好26位,一个int类型就能保存了,通过与操作判断是否有相同字母

int convert(int *nums){
    int m = 0,i;
    for(i='a';i<='z';i++){
        m<<=1;
        if(nums[i] > 0)
            m|=1;
    }
    return m;
}

int maxProduct(char ** words, int wordsSize){
    int **nums = malloc(sizeof(int*) * wordsSize);
    int i,j;
    for(i=0;i<wordsSize;i++){
        nums[i] = malloc(sizeof(int)*2);
    }

    int count[128],l;
    char *p;
    for(i=0;i<wordsSize;i++){
        memset(count,0,sizeof(count));
        for(p=words[i],l=0;*p!='\0';p++,l++){
            count[*p]++;
        }
        nums[i][0] = convert(count);
        nums[i][1] = l;
    }

    int mul = 0,mul_tmp;
    for(i=0;i<wordsSize;i++){
        for(j=i+1;j<wordsSize;j++){
            if((nums[i][0] & nums[j][0]) == 0){
                mul_tmp = nums[i][1] * nums[j][1];
                if(mul_tmp>mul)
                    mul = mul_tmp;
            }
        }
    }

    for(i=0;i<wordsSize;i++){
        free(nums[i]);
    }
    free(nums);

    return mul;
}

猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/112723646
今日推荐