如何遍历字符串数组元素的每一位.318

发布时间 2023-11-07 22:31:16作者: LIJIACHENG~

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 , 按位与就不为零,需要改进方法。