题目

给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。

示例 1:

输入: words = [“abcw”,“baz”,“foo”,“bar”,“fxyz”,“abcdef”]
输出: 16
解释: 这两个单词为 “abcw”, “fxyz”。它们不包含相同字符,且长度的乘积最大。

示例 2:

输入: words = [“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abcd”]
输出: 4
解释: 这两个单词为 “ab”, “cd”。

示例 3:

输入: words = [“a”,“aa”,“aaa”,“aaaa”]
输出: 0
解释: 不存在这样的两个单词。

题解

暴力解法时间复杂度过高,考虑使用位运算方式->用一个32位二进制数BitMask代表每一个单词字母掩码,如abce,对应BitMask 0,1,2,4位置1,两个单词bitMask与操作结果为0则代表没有相同字符串

int maxProduct(vector<string>& words) {// 用比特位记录每个单词的掩码,每个字母对应位置比特位置1// map记录,比特掩码相同情况下单词的最长长度//int n = words.size();//bitMaskMap记录单词长度最长的bitMask,减少不必要的比较unordered_map<int, int> bitMaskMap;// 预计算for(int i = 0;i < n; ++i){int bitMask = 0;for(char c:words[i])bitMask |= 1 << (c-'a');if(bitMaskMap.count(bitMask)){int max_ = max(bitMaskMap[bitMask], (int)words[i].size());bitMaskMap[bitMask] = max_;}elsebitMaskMap[bitMask] = words[i].size();}int ret = 0;for(auto& x:bitMaskMap){for(auto& y:bitMaskMap){if((x.first & y.first) == 0)ret = max(ret, x.second * y.second);}}return ret;}

剑指Offer Ⅱ 005.单词长度的最大乘积 (力扣剑指Offer专项突击版——整数_5)相关推荐

  1. 剑指Offer Ⅱ 003.二进制加法(力扣剑指Offer专项突击版——整数_3)

    题目 给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组. 示例 1: 输入: n = 2 输出: [0,1,1] 解释: 0 --> 0 1 ...

  2. 剑指Offer Ⅱ 001. 整数除法(力扣剑指Offer专项突击版——整数_1)

    题目 给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'.除号 '/' 以及求余符号 '%' . 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:tr ...

  3. 剑指 Offer(专项突击版)Java 持续更新....

    剑指 Offer(专项突击版) 刷题链接: https://leetcode-cn.com/problem-list/e8X3pBZi/?page=1 No.001 题目: 整数除法 1. 刷题链接: ...

  4. 剑指offer专项突击版第24天

    剑指 Offer II 071. 按权重生成随机数 二分+前缀和 看了几遍题目愣是没看明白,最后看的题解明白了! 题意就是按照 w[i]w[i]w[i] 的权重选取下标 iii,这个问题可以转化成:所 ...

  5. 剑指 Offer II 022. 链表中环的入口节点(力扣剑指Offer专项突击版——链表2)

    题目 给定一个链表,返回链表开始入环的第一个节点. 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 po ...

  6. 力扣剑指 Offer 17. 打印从1到最大的n位数

    题目描述 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 示例 1:输入: n = 1 输出: [1,2,3,4 ...

  7. 力扣剑指 Offer 05. 替换空格(JavaScript)

    扩大数组,定义双指针从后往前遍历,如果为空,则填入20% var replaceSpace = function(s) {//转化为数组let arr=Array.from(s)//计算空格数let ...

  8. 力扣 剑指 Offer 10- I. 斐波那契数列

    文章目录 题目 思路 AC代码 题目 斐波那契数列 思路 这次的斐波那契数列不太一样,它输入的数值会很大,远远超过long long的取值范围.所以我们要在滚动数组的同时处理这些数. 注意1e9类的数 ...

  9. 力扣—剑指 Offer 45. 把数组排成最小的数

    题目 解决方法 参看官方解决思路,就是将数列中的元素两两拼接.如'2'+'3'='23'<'3'+'2'='32'则2在3的左边.由于该题不用考虑组合后第一位是零的情况,所以这样将所有的元素比较 ...

最新文章

  1. php libev pthreads,libuv 与 libev 的对比
  2. LAMP:用yum安装
  3. 征战蓝桥 —— 2018年第九届 —— C/C++B组第3题——乘积尾零
  4. MyBatis中动态SQL
  5. Linux umask限制导致php的mkdir 0777无效
  6. 下载与eclipse匹配的hibernate tools
  7. android开发(44) 使用了 SoundPool 播放提示音
  8. iOS之友盟简单分享(第三方)及sso授权问题
  9. pr剪辑教程,如何跨剪辑应用和调整效果?
  10. Python 操作 DB2 库_亲测可用
  11. Unity3d十二 3d主要引擎名称Ogre Unreal Unity Gamebryo Bigworld
  12. 小米 线刷 android,小米10 Android 11 Beta 1线刷包已放出,安卓11/MIUI 12二选一
  13. python 文件内容对比_用python进行文件比对
  14. Wechall Wireup(一)
  15. 常见的国家语言缩写以及语言的代码
  16. 做教育怎么引流?教育行业怎么引流?培训机构引流如何转化?
  17. 大数据集群搭建(jdk、hadoop、hive、mysql、spark、flume、zookeeper)
  18. SpringMVC基础一
  19. 服务器操作系统win2008如何打补丁,如何安装win server 2008 r2 sp1补丁?
  20. FP-growth:从FP树中挖掘频繁项集

热门文章

  1. 59. Leetcode 81. 搜索旋转排序数组 II(二分查找-局部有序)
  2. 51. Leetcode 106. 从中序与后序遍历序列构造二叉树 (二叉树-二叉树构建)
  3. python笔记 print+‘\r‘ (打印新内容时删除打印的旧内容)
  4. 增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)
  5. 特征选择常用算法综述
  6. sr锁存器 数电_随机存取存储器 RAM || SRAM || DRAM || 数电
  7. Python编程基础:第五节 用户输入User Input
  8. Hbase Replication 介绍
  9. 服务发现框架选型,Consul还是Zookeeper还是etcd
  10. 谈API网关的背景、架构以及落地方案--转