// "abcw" "baz" "foo" "bar" "xtfn" "abcdef"
//return 16
//"abcw" "xtfn"
//对于单词字符串的字符出现情况我们可以使用一个哈希表来记录,由于范围限定在‘a’~'z',
//我们可以直接使用26位的数组,由于只需标记字符是否出现(状态只有0和1),
//因此我们只需要用一个位来表示该字符是否存在,因此我们只需要一个32位的整型变量,
//其32个二进制位就可以标记字符出现情况,并且我们在匹配两个字符串出现字符是否有重复时,我们只需要使用位与(&)即可。
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define MAXLEN 65535
int maxProduct(char **words, int num)
{
if(num == 0)
{
return 0;
}
int res;
int *mark = new int[num];
memset(mark, 0, sizeof(int) * num);
for(int i = 0; i < num; i++)
{
int len = strlen(words[i]);
for(int j = 0; j < len; j++)
{
mark[i] |= (1 << (words[i][j]-'a'));
}
}
int max = 0;
int curLen = 0;
for(int i = 0; i < num; i++)
{
for(int j = i + 1; j < num; j++)
{
if((mark[i] & mark[j]) == 0)
{
curLen = strlen(words[i]) * strlen(words[j]);
if(max < curLen)
{
max = curLen;
}
}
}
}
return max;
}
int main()
{
char *(arr[7]) = {"a", "ab", "abc", "d" ,"cd", "bcd","abcd"};
for(int i = 0; i < 7; i++)
{
cout << arr[i] << endl;
}
cout << maxProduct(arr, 7) << endl;
system("pause");
return 0;
}
要是我能熟练运用string类, 就好了。。。