code:
int maxProduct(char ** words, int wordsSize){
int a[wordsSize]; //目标字符串转换成整型数组元素
int maxlen = 0; //最大长度乘积
for(int i = 0; i < wordsSize ;++i){ //遍历字符串数组
for(int j = 0; j < strlen(words[i]);++j){ //遍历每一个元素的每一位
a[i] += 1 <<( words[i][j] - 'a'); //得到每一个字母的整型数字,如abc ——> 111(base 2)
}
}
for(int i = 0;i < wordsSize; ++i){
for(int j = i + 1; j < wordsSize; ++j){
if(a[i] & a[j] == 0){ //遍历处理后的整型数组,如果字母没有重复,按位与计算后 就应该得到 0
maxlen = strlen(words[i]) > strlen(words[j]) ? strlen(words[i]) : strlen(words[j]); //满足条件就更新最大长度乘积
}
}
}
return maxlen;
}
领悟:最重要的步骤是理解里面对于字母转换成整型数组时的位运算,将字母的不同体现在高位的不同,如 ‘ a ’ ——》1 ,‘ b ’ ——》10,求和后就是11,但是这个方法有漏洞,相同字母可能因为数量不同得到不同的结果,导致按位与的结果不为零,如一个a与两个a , 按位与就不为零,需要改进方法。