[Leetcode] 第318题 最大单词长度乘积
一、题目描述
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
示例 1:
输入:["abcw","baz","foo","bar","xtfn","abcdef"]
输出:16
解释: 这两个单词为"abcw", "xtfn"。
示例 2:
输入:["a","ab","abc","d","cd","bcd","abcd"]
输出:4这两个单词为
解释:"ab", "cd"。
示例 3:
输入:["a","aa","aaa","aaaa"]
输出:0
解释: 不存在这样的两个单词。
二、题目分析
1)这个问题的关键在于判断两个单词是否有重合的部分,要把所有单词两两组合一遍时间复杂度是n*n
2)所以判断部分应该尽量用常数时间
3)采用位运算,把单词中字母出现的情况,映射成整数中位的情况,比如单词中含有'a',那么整数中从右向左第1位就是1,采用移位的方法
4)这个时间复杂度是n*sizeof(words[i]),每一位采用“或等于”计算
5)这样两个单词无交集就映射为bit_word做“与”运算为0
三、代码
class Solution {
public:
int maxProduct(vector<string>& words) {
int n = words.size();
int res = ;
int i, j;
vector<int>bit_word(n, );
for (i = ; i < n; ++i) {
for (j = ; j < words[i].size(); ++j) {
bit_word[i] |= << (words[i][j] - 'a');
}
}
for (i = ; i < n; ++i) {
for (j = i + ; j < n; ++j) {
if (bit_word[i] & bit_word[j])continue;
res = res < words[i].size()*words[j].size() ? words[i].size()*words[j].size() : res;
}
}
return res;
}
};
[Leetcode] 第318题 最大单词长度乘积的更多相关文章
- Java实现 LeetCode 318 最大单词长度乘积
318. 最大单词长度乘积 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母.你可以认为每个单词只包含小 ...
- Leetcode 318.最大单词长度乘积
最大单词长度乘积 . 示例 1: 输入: ["abcw","baz","foo","bar","xtfn&qu ...
- 程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
第六周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 1 单词长度(4分) 题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这 ...
- 318 Maximum Product of Word Lengths 最大单词长度乘积
给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且两个单词不含公共的字母.你可以认为每个单词只包含小写字母.如果不存在这样的两个单词,返 ...
- [Swift]LeetCode318. 最大单词长度乘积 | Maximum Product of Word Lengths
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- [leetcode]318. Maximum Product of Word Lengths单词长度最大乘积
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- 【LeetCode每天一题】Substring with Concatenation of All Words(具备列表中所有单词的字串)
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- Leetcode分类刷题答案&心得
Array 448.找出数组中所有消失的数 要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间 思路 ...
随机推荐
- centos6.8启动防火墙的艰辛过程
首先我的/etc/sysconfig/iptables文件没有. 解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptab ...
- iOS 视图渲染数据转CVPixelBuffer
近两年一直从事视频行业的开发, 加班也比较严重, 好久没有写文章了, 最近稍微有些时间, 前来写点文章, 记录一些开发中遇到的问题, 和解决方法! 做视频会议项目, 当然是离不开音视频啦, 也常常和W ...
- Docker学习总结(一)--Docker简介
什么是虚拟化 在计算机中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存等,以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比之前更好的应用这些资源. 在实 ...
- Android进阶之路(1)-详解MVC
最近因为换工作的原因没有写博客,现在慢慢稳定了,我准备写一些关于Android 进阶的文章,也是为了督促自己学习,大家一起进步! 今天详细的分析一下Android APP架构之一:MVC ### MV ...
- C#开发BIMFACE系列2 二次开发流程
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE 平台是一个对外开放的平台,建筑行业的相关公司.软件公司或者有 BIM 业务需求的公司都可以注册成为开发者并使用其提供的强大功能. ...
- hdu 6215 Brute Force Sorting(模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题解:类似双链表的模拟. #include <iostream> #include ...
- 树形动态规划 fjutoj-2131 第四集,聚集城市
第四集,聚集城市 TimeLimit:1000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description 在小A ...
- 树莓派的Respbian或者ubuntu系统下安装opencv最有效的方法
第一种方法当然首选和其他安装包相同的方法pip install opencv-python安装失败后果断选择第二种方法,这第二种方法尝试过很多次了,屡试不爽 第二种方法:sudo apt-get in ...
- Salesforce LWC学习(六) @salesforce & lightning/ui*Api Reference
上一篇中我们在demo中使用了很多的 @salesforce 以及 lightning/ui*Api的方法,但是很多没有细节的展开.其实LWC中针对这些module提供了很多好用的方法,下面对这两种进 ...
- Dijkstra算法的Java实现
package main.java; import main.java.utils.GraphUtil; import java.util.ArrayDeque; import java.util.L ...