当前位置: 首页 > news >正文

每日一题 --- 力扣318----最大单词长度乘积

 这道题时间复杂度我感觉设置的不是很好,应该最好是有一个1000变成10000就行。

 因为我在做这道题的时候被误导了,以为双重循环暴力判断一下也能过,因为1000*1000

 *26的时间复杂度没有到1亿,那么我刚开始认为是能过的,结果卡在最后一个用例上了,

 那么后期,我就开始想怎么优化掉那个26,26刚好可以用bitmap(状态压缩)和位运算的思想,

 这样我们可以优化掉那个26的复杂度,这样我们就能过了

 附上第一次暴力解法(卡在最后一个用例)

class Solution {
public:int vv[1100][32];int maxProduct(vector<string>& words) {int n = words.size();for(int i = 0;i < n;i++){for(int j = 0;j <words[i].size();j++){if(words[i][j] < 'a' || words[i][j] > 'z') continue;int index = words[i][j]- 'a';vv[i][index]++;}}int ans = -0x3f3f3f3f;for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){if(i == j) continue;else{bool flag = false;if(words[i].size() >= words[j].size()){for(int c = 0;c < words[i].size();c++){int index = words[i][c]- 'a';if(vv[i][index] && vv[j][index]){flag = true;break;}}}else{for(int c = 0;c < words[j].size();c++){int index = words[i][c]- 'a';if(words[i][c] < 'a' || words[i][c] > 'z') continue;if(vv[i][index] && vv[j][index]){flag = true;break;}}}if(!flag) {int a = words[i].size();int b = words[j].size();ans = max(ans,a * b);}}}}return ans == -0x3f3f3f3f ? 0 : ans;}
};

 正确解法:

 利用int类型有32位,刚好可以通过32位来映射对应的26位小写字母来达到

 比如

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

 来了一个字符串"aaccb"

 那么就可以映射成

 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

 有些不喜欢思考的人还会问,为什么aa这些都映射在一个地方呢

 因为我们根据题目要求的是找到两个字符串中,没有相同的字符

 所以一个字符串有重复的字符就可以默认只有一个这样的字符,

 因为假设"aab" ,"ac" 和 "ab" , "ac",一个字符串中少一个重复字符和多一个重复

 字符没什么区别,所以我们可以将一个字符串中的相同的字符直接映射到同一个位上

 1代表该字符串有该字符,0代表没有

 映射完之后我们怎么办呢?

 //既然用到用整数进行状态压缩了,那么我们就可以根据经验也就是位运算来判断了

 1 1 1 0 0 0 0 0  --- "aaabbc"

 1 0 1 0 0 0 0 0  --- "aaaccc"

 两个数字&一下可以得出一个数字,

 得到 (这个数字代表的是,两个字符串中,相同的字符置为1,不相同的字符置为0)

 1 0 1 0 0 0 0 0

 1 0 1 0 0 0 0 0  ---  "aaaccc"

 0 1 0 0 0 1 0 0  ---  "bbbffff"

 得到  (这个数字代表的色,两个字符串中,相同的字符置为1,不相同的字符置为0)

0 0 0 0 0 0 0 0

那么我们得出一个结论:

如果数字大于0,说明两个字符串中有相同的字符

如果数字等于0,说明两个字符串中没有相同的字符

本题还有一个很小很小的优化

就是双重循环的时候,我们可以去重

假设

1 2 3 4

每个数只与前面的数进行判断,那么就可以去除掉重复的组合了

class Solution {
public:int mask[1100];int maxProduct(vector<string>& words) {int n = words.size();for(int i = 0;i < n;i++){for(int j = 0;j <words[i].size();j++){mask[i] |= (1 << (words[i][j] - 'a'));//状态压缩}}int ans = -0x3f3f3f3f;for(int i = 0;i < n;i++){for(int j = 0;j < i;j++){if(!(mask[i] & mask[j])){int a = words[i].size();int b = words[j].size();ans = max(ans,a * b);}}}return ans == -0x3f3f3f3f ? 0 : ans;}
};

 

相关文章:

每日一题 --- 力扣318----最大单词长度乘积

这道题时间复杂度我感觉设置的不是很好&#xff0c;应该最好是有一个1000变成10000就行。 因为我在做这道题的时候被误导了&#xff0c;以为双重循环暴力判断一下也能过&#xff0c;因为1000*1000 *26的时间复杂度没有到1亿&#xff0c;那么我刚开始认为是能过的&#xff0c;结…...

掌动智能性能压力测试优势有哪些

企业通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。本文将介绍性能压力测试的价值及主要优势! 一、性能压力测试的价值 1、评估系统能力&#xff1a;有助于参数的基准测试&#xff0c;可以度量系统的响应时间;还有助于检查系统是否可…...

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复

我们知道虚拟机有三种模式&#xff1a; vmnet0 桥接模式&#xff1b;vmnet1 仅主机模式&#xff1b;vmnet8 NAT模式 我自己以前一直用的NAT模式&#xff0c;今天突然要用到桥接模式&#xff0c;发现无法切换... 我下面这个是后面弄好了的&#xff0c;最开始是没有显示桥接模式…...

【Python】批量下载素材酷视频资源

【需求】 做视频精彩需要用到梗图视频等,但是素材酷上面的视频没有搜索功能,每次用起来还要去下载也很麻烦,下载只能一个一个下载也很麻烦,下要搞一个能够批量下载的功能,然后把下载的资源全部放进万兴喵影编辑器的云空间,这样就可以做到随做随查随用了。 【效果】 目…...

QuantLib学习笔记——一个简单的价值估算案例

⭐️ 前言 QuantLib很强大&#xff0c;它实现了很多金融工具及其价值估算方法&#xff0c;从最简单的折现模型&#xff0c;到利用BSM模型对期权进行定价&#xff0c;覆盖面相当齐全。本文以一个简单的净现值估算案例&#xff0c;开启笔者金融工具估值的旅程。 开上豪车&#…...

智能语音和自然语言处理技术

一、定义 智能语音和自然语言处理技术是指通过计算机技术实现人机交互的一种技术。它可以让计算机和人类之间进行自然而流畅的交流&#xff0c;从而实现更高效、更便捷、更智能的信息交流和处理。 智能语音和自然语言处理技术主要包括语音识别、语音合成、自然语言理解、自然…...

【Sql】sql server数据库提示:执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。

【问题描述】 打开sql server2008r2数据库的时候&#xff0c; 系统提示执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb&#xff0c;错误&#xff1a;926。 【概念理解】 首先MSDB数据库是的作用&#xff1a; 用于给SQL Server代理提供必要的信息来运行调度警…...

Day 5 登录页及路由 (三) 基于axios的API调用

系列文章目录 本系列记录一下通过Abp搭建后端&#xff0c;VueElement UI Plus搭建前端&#xff0c;实现一个小型项目的过程。 Day 1 Vue 页面框架Day 2 Abp框架下&#xff0c;MySQL数据迁移时&#xff0c;添加表和字段注释Day 3 登录页以及路由 (一&#xff09;Day 4 登录页以…...

雷神学习---视音频数据处理入门:RGB、YUV像素数据处理

原文地址&#xff1a;https://blog.csdn.net/leixiaohua1020/article/details/50534150 ​​​​​​​​从代码可以看出&#xff0c;如果想把YUV格式像素数据变成灰度图像&#xff0c;只需要将U、V分量设置成128即可。 这是因为U、V是图像中的经过偏置处理的色度分量。色度分…...

Asp.Net Core服务端处理请求过来的压缩格式

之前是直接传没有经过压缩的文件字节&#xff0c;有时文件过大的话&#xff0c;可能占宽带就多&#xff0c;宽带流量都是钱。后来有个想法&#xff0c;在客户端把文件进行压缩&#xff0c;把压缩的文件流发给服务端进行解压。 1&#xff0c;先修改项目中Startup.cs文件中Confi…...

自定义指令

二、自定义指令 1.指令介绍 内置指令&#xff1a;v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令&#xff0c;可以直接使用 自定义指令&#xff1a;同时Vue也支持让开发者&#xff0c;自己注册一些指令。这些指令被称为自定义指令 每个指令都有自己各自独立的功…...

仿真实现lio_sam建图和ndt_matching定位

文章目录 一、仿真环境二、lio_sam建图1.修改配置文件2.开始建图 三、ndt_matching定位1.新建启动文件2.启动 总结 一、仿真环境 使用现有开源的仿真环境—从零开始搭建一台ROS开源迷你无人车&#xff0c;作者已经配置好小车模型以及gazebo环境&#xff0c;imu频率已改为200HZ…...

IDEA取消git对项目的版本控制

前言 前几天新建项目的时候不小心选了个git仓库&#xff0c;导致这个测试项目一直被git管理着。 解决办法 1 右键项目 选择打开资源目录 2 删除.git文件 把目录下的.git文件删掉 3 删除idea中的git管理 删除完.git文件后&#xff0c;进入idea&#xff0c;右下角会有这样的提…...

如何聪明地编写测试

作者&#xff5c;Maxim Schepelin Booking公司软件开发工程师 编译整理&#xff5c;TesterHome 以下为作者观点&#xff1a; 在我&#xff08;作者&#xff09;的职业生涯中&#xff0c;我多次看到团队如何开始自动化测试&#xff0c;当然并非所有尝试都成功。在这篇文章中…...

CF1866M Mighty Rock Tower

CF题面 luogu题面 期望题。 题目大意&#xff1a;一个人在搭积木&#xff0c;每次堆叠可能成功或失败&#xff0c;失败可能导致其下面连续的若干块掉落。给定搭每一块时失败的概率&#xff0c;求堆叠完成的期望次数。 具体的&#xff0c;假设当前正在堆叠第 i 块&#xff0c;…...

【漏洞复现】Apache_Tomcat7+ 弱口令 后台getshell漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号漏洞名称Tomcat7 弱口令 && 后台getshell漏洞漏洞评级高…...

2023-11-7 OpenAI 45 分钟发布会:演示关于 GPT Store 构建 GPT、零代码创建 AI Agent

本心、输入输出、结果 文章目录 2023-11-7 OpenAI 45 分钟发布会&#xff1a;演示关于 GPT Store 构建 GPT、零代码创建 AI Agent前言Sam Altman 正在创建一个「创业导师 GPT」零代码创建 AI AgentAssistants API 封装的能力包括 Sam Altman 对发布会总结相关链接弘扬爱国精神 …...

嵌入式系统中的FPGA

举个栗子 假设你有一台智能家居系统&#xff0c;其中的FPGA可以被类比为智能家居中的中央控制器。 智能家居系统&#xff1a; 定制家居逻辑&#xff1a; 你希望智能家居系统能够根据你的生活习惯、时间表和喜好自动控制灯光、温度、窗帘等设备。就像FPGA中可以根据需求重新配置…...

String,StringBulider,StringBuffer的简单说明

目录 1.String 2.StringBuffer 3.StringBuilder 4.线程安全的验证 1.String String是声明在java.lang下的一个类。 String被定义为final&#xff0c;表示不能被继承。内部定义了final char value[]用于存储字符串数据&#xff0c;所以String对象的值是不可改变的。每次对S…...

Python编程题集(第一部分基本语法基础)

Demo01 摄氏温度转化为华氏温度 题目描述&#xff1a; 输入一个摄氏温度的值&#xff0c;将它转变为华氏温度&#xff0c;并将结果输出 转换的公式为如下&#xff1a;fahrenheit (9 / 5 ) * celsius 32 输入输出描述 输入一个值表示摄氏温度celsius 输出华氏温度fahren…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...