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 , 按位与就不为零,需要改进方法。 标签:遍历,数组,int,wordsSize,318,words,字符串,strlen From: https://www.cnblogs.com/2874147746lijiacheng/p/17816212.html