字符串长度乘积最大值 位操作

来源:互联网 发布:用eclipse写java 编辑:程序博客网 时间:2024/06/05 19:49

这里写图片描述

// "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 65535int 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类, 就好了。。。

阅读全文
0 0