LC 318. Maximum Product of Word Lengths

news/2024/12/18 5:11:52/

题目描述

Leetcode 318
给定一个只包含小写字母字符串数组,返回两个没有共同字符的字符串长度乘积的最大值

题目思路

简单的思路是将字符串编码成长度为26的数组,然后两两字符串比较,这样可以将O(L1L2)的比较压缩到O(2626)。

位图bitmap

这道题目可以使用bitmap将压缩成一个26位二进制,每一位0/1表示是否有这个字符串,类似one-hot encoding。然后两个字符串比较时间复杂度可以压缩成 bit(A) & bit(B) 也就是 O(1)

代码如下
class Solution {
public:int maxProduct(vector<string>& words) {//bitmap可以直接将字符串根据字符one-hot转化成26位二进制unordered_map<int, int> bitmap;// key是bit,value是拥有bit分布的最长长度for (int i=0; i<words.size(); i++) {int bitmask = 0;for (char ch: words[i]) {int _idx = ch-'a';bitmask |= 1<<_idx;}// ab 和 aabb具有相同one-hot编码bitmap[bitmask] = max(bitmap[bitmask], (int)words[i].length());}int res = 0;for (const auto& p1 : bitmap) {for (const auto& p2: bitmap) {if ((p1.first & p2.first)==0) {res = max(res, p1.second * p2.second);}}}return res;}
};

时间复杂度: O ( L + N 2 ) \mathcal{O}(L + N^2) O(L+N2) L为字符串数组总长度,N为hashmap空间
空间复杂度: O ( N ) \mathcal{O}(N) O(N) N为Hashmap空间


http://www.ppmy.cn/news/1556044.html

相关文章

如何高效获取Twitter数据:Apify平台上的推特数据采集解决方案

引言 在数据分析和市场研究领域&#xff0c;Twitter&#xff08;现在的X&#xff09;数据一直是重要的信息来源。但是&#xff0c;自从Twitter更改API定价策略后&#xff0c;获取数据的成本大幅提升。本文将介绍一个经济实惠的替代方案。 为什么需要Twitter数据&#xff1f; …

go项目zero框架在Linux或Windows服务器中加入开机启动

为了使Go项目在系统启动时自动运行&#xff0c;您可以根据操作系统选择不同的方法。以下是针对Linux和Windows系统的两种常见方案。 ### Linux 系统 #### 使用 Systemd (推荐) Systemd 是大多数现代Linux发行版默认的初始化系统和服务管理器。通过创建一个systemd服务文件&…

快速搭建conda深度学习环境全流程(又全又简洁)

1.首先在云服务器或者本地环境安装miniconda 选择自己电脑相应的版本 Miniconda — Anaconda documentation mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda…

简单了解一下 Go 语言的构建约束?

​构建约束是一种在 Go 语言中控制源文件编译条件的方法&#xff0c;它可以让您指定某些文件只在特定的操作系统、架构、编译器或 Go 版本下编译&#xff0c;而在其他环境中自动忽略。这样可以方便您针对不同的平台或场景编写不同的代码&#xff0c;实现条件编译的功能。 构建…

游戏引擎学习第41天

这一节就讨论了一些数学知识 讨论为什么要进行数学讨论 现在到了需要真正开始讨论数学的时候了&#xff0c;因为从这一步开始&#xff0c;几乎所有计划做的事情都将涉及比基本代数更复杂的数学内容。到目前为止所做的一切基本都可以用基础代数技能理解&#xff0c;但从现在开…

Databend 为什么使用 Rust 开发?

11 月 30 日&#xff0c;Rust China Tour 武汉站在武汉恺德光谷城际酒店举行。本次活动汇聚了来自 Databend、GreptimeDB、华中科技大学的多位 Rust 技术专家和研究者&#xff0c;共同探讨 Rust 语言在前沿技术中的创新应用。Databend 数据库研发工程师张祖前在活动中带来主题演…

微服务之间的相互调用的几种常见实现方式对比 2

本文承接我的另一篇博客微服务之间的相互调用的几种常见实现方式对比_微服务之间怎么互相调用-CSDN博客 目录 五、消息队列 特点 适用场景 六、服务代理 特点 常见实现方法 1. Zuul 工作原理 2. Spring Cloud Gateway 三大核心概念 工作流程 实现步骤 七、事件驱动…

Pytest测试用例使用小结

基础使用 Pytest 测试用例实现代码 import pytest from server.service import Servicepytest.fixture def service():return Service(logger)class TestService:classmethoddef setup_class(cls):"""初始化设置一次:return:"""logger.info(&q…