首页
留言
关于
统计
友链
Search
1
[C++Quiz]#4、#116、#174
1 阅读
2
C/C++选手初学Python可能遇到的问题
0 阅读
3
[C++Quiz]#27、#41、#44
0 阅读
4
[C++Quiz]#185、#207、#219
0 阅读
5
[C++]std::variant
0 阅读
C/C++
数据结构与算法
CSLab
xv6
bustub
6.5840
数据库
doris
SQL
做个数据库
工具
CS
登录
Search
标签搜索
C++
cppquiz
xv6
算法
doris
论文
os
CS
leetcode
Git
tools
并发
6.5840
Koarz
累计撰写
24
篇文章
累计收到
4
条评论
首页
栏目
C/C++
数据结构与算法
CSLab
xv6
bustub
6.5840
数据库
doris
SQL
做个数据库
工具
CS
页面
留言
关于
统计
友链
搜索到
1
篇与
的结果
2023-11-06
[算法题解]leetcode 318. 最大单词长度乘积
题目首先读题,题目要求两个字符串不能含有公共字母,这句话还隐含了一个意思就是我们在比较两个字符串时,可以先看两个字符串出现的字母有没有相同的,那么我们可以将字符串处理成每个字母只出现一次,再进行比较,但是进一步想,一共只有26个字母,一个int类型的数据可以储存32位的01,我们是不是可以只用一个int数据就可以表示一个字符串所包含的字符呢?我们用1表示该位置的字母出现,例如:“a”,我们可以表示为000...01,“ab”就是000...0011,明白了吗?所以我们可以这样处理当前字符n |= (1 << v - 'a')n就是该字符串处理后对应的数字,v就是s中的一个字符。处理好s之后我们还要记录下n对应的最大长度,直接用max函数即可。这里我用哈希表来实现:unordered_map<int,int> hash; for(string &s : words) { int n = 0; for(char v : s){ n |= (1 << (v - 'a')); } hash[n] = max(hash[n],(int)s.size()); }先迭代words再迭代s储存我们想要的结果,之后我们就需要实现计算最大长度积了。怎么判断两个n是否在相同的位都有1?做算数与运算即可,只有他们没有公共位含有1时结果才为0.if(hash.size()<2) return 0; int ans{}; for(auto it = hash.begin();it != hash.end();it++) { auto at = it; at++; for(;at != hash.end();at++) { if(!(it->first & at->first)) ans = max(ans,int(it->second*at->second)); } }以上就是所有内容。
2023年11月06日
0 阅读
0 评论
0 点赞