代码实现:
1. 位运算
int maxProduct(char **words, int wordsSize) { int ans = 0; //定义两个数组,mask[]初始化为0 int *mask = (int*)calloc(wordsSize, sizeof(int)); int *length = (int*)malloc(sizeof(int) * wordsSize); //存储相应字符串长度 for(int i = 0; i < wordsSize; i++) length[i] = (int)strlen(words[i]); //计算mask各项的值 for(int i = 0; i < wordsSize; i++) { char *temp = words[i]; for(int j = 0; temp[j]; j++) mask[i] |= (1 << (temp[j] - 'a')); //把1左移 再按位或 } //计算ans最大值 for(int i = 0; i < wordsSize - 1; i++) { for(int j = i + 1; j < wordsSize; j++) { //有重复字符,直接比较下一个 if((mask[i] & mask[j]) != 0) continue; //没有重复字符的情况 if(ans < length[i] * length[j]) ans = length[i] * length[j]; } } return ans; }
2. 穷举 超时
int maxProduct(char ** words, int wordsSize) { int max = 0; int len1; //第一个长度 int len2; //第二个长度 int flag; //标记位 for (int i = 0; i < wordsSize - 1; i++) { for (int j = i + 1; j < wordsSize; j++) { char *p = words[i]; len1 = strlen(p); flag = 1; while (*p) { char *pp = words[j]; len2 = strlen(pp); while (*pp) { if (*p == *pp) { flag = 0; break; } pp++; } p++; if (flag == 0) break; } if (flag) max = max > len1 * len2 ? max : len1 * len2; } } return max; }