zoukankan      html  css  js  c++  java
  • leetcode | Maximum Product of Word Lengths

    Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.

    题目:意思是根据给出的字符串数组,算出最大的两个不相同字符串长度的乘积,两个字符串的每一个字符都是不一样的才能算不同

    思路:第一反应无疑是对每一个字符串进行字符次数统计,形成一个map数组,而后找出完全不同字符串的,找出乘积最大的一对返回。这样显然是可以解决问题,但是毫无想法可言,看看提示说用bit运算,照着先人代码一番思考后,思路明了,大致是,对于一个字符串的每一个字符与'a'的相对差值,将其放入一个26位的二进制数n的相应的位置,例如b就放在n的左起第二位,,,依次我们可以得到每一个字符串的的一个int数字,进而得到一个关于字符串数组的int数组,根据两个int[i]&int[j] == 0,这两个数的二进制就是完全相反的,对应的字符串也是完全不同的,算出长度乘积,找出最大的


    public int maxProduct(String[] words) {

      int len = words.length;
      int [] bWords = new int [len];
      for(int i = 0;i<len;i++){
        for(int j = 0;j<words[i].length();j++){
        bWords[i] |= 1 << (words[i].charAt(j) - 'a');
        }
      }

      int max = 0;
      for(int i = 0;i<len;i++){
        for(int j = i+1;j<len;j++){
          if((bWords[i] & bWords[j]) == 0){//特别注意& ,==两个运算符的优先级
          max = Math.max(words[i].length() * words[j].length(),max);
            }
        }
      }
      return max;
    }

    StayHungry 求知若渴 StayFoolish 放低姿态
  • 相关阅读:
    robot framework 初始化清除
    python获取命令行参数
    行业基金
    Ubuntu关闭开机自启项
    ubuntu18.04安装adb
    JavaScript
    centos关闭开机自启项
    CSDN值得学习的专栏
    ubuntu和centos操作命令对比
    linux解压文件命令
  • 原文地址:https://www.cnblogs.com/wujunjie/p/5713650.html
Copyright © 2011-2022 走看看