题目 <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;
}