每日一题 --- 力扣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----最大单词长度乘积
这道题时间复杂度我感觉设置的不是很好,应该最好是有一个1000变成10000就行。 因为我在做这道题的时候被误导了,以为双重循环暴力判断一下也能过,因为1000*1000 *26的时间复杂度没有到1亿,那么我刚开始认为是能过的,结…...
掌动智能性能压力测试优势有哪些
企业通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。本文将介绍性能压力测试的价值及主要优势! 一、性能压力测试的价值 1、评估系统能力:有助于参数的基准测试,可以度量系统的响应时间;还有助于检查系统是否可…...
虚拟机没有桥接模式--物理机WiFi不见了--注册表修复
我们知道虚拟机有三种模式: vmnet0 桥接模式;vmnet1 仅主机模式;vmnet8 NAT模式 我自己以前一直用的NAT模式,今天突然要用到桥接模式,发现无法切换... 我下面这个是后面弄好了的,最开始是没有显示桥接模式…...
【Python】批量下载素材酷视频资源
【需求】 做视频精彩需要用到梗图视频等,但是素材酷上面的视频没有搜索功能,每次用起来还要去下载也很麻烦,下载只能一个一个下载也很麻烦,下要搞一个能够批量下载的功能,然后把下载的资源全部放进万兴喵影编辑器的云空间,这样就可以做到随做随查随用了。 【效果】 目…...
QuantLib学习笔记——一个简单的价值估算案例
⭐️ 前言 QuantLib很强大,它实现了很多金融工具及其价值估算方法,从最简单的折现模型,到利用BSM模型对期权进行定价,覆盖面相当齐全。本文以一个简单的净现值估算案例,开启笔者金融工具估值的旅程。 开上豪车&#…...
智能语音和自然语言处理技术
一、定义 智能语音和自然语言处理技术是指通过计算机技术实现人机交互的一种技术。它可以让计算机和人类之间进行自然而流畅的交流,从而实现更高效、更便捷、更智能的信息交流和处理。 智能语音和自然语言处理技术主要包括语音识别、语音合成、自然语言理解、自然…...
【Sql】sql server数据库提示:执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。
【问题描述】 打开sql server2008r2数据库的时候, 系统提示执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。 【概念理解】 首先MSDB数据库是的作用: 用于给SQL Server代理提供必要的信息来运行调度警…...
Day 5 登录页及路由 (三) 基于axios的API调用
系列文章目录 本系列记录一下通过Abp搭建后端,VueElement UI Plus搭建前端,实现一个小型项目的过程。 Day 1 Vue 页面框架Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释Day 3 登录页以及路由 (一)Day 4 登录页以…...
雷神学习---视音频数据处理入门:RGB、YUV像素数据处理
原文地址:https://blog.csdn.net/leixiaohua1020/article/details/50534150 从代码可以看出,如果想把YUV格式像素数据变成灰度图像,只需要将U、V分量设置成128即可。 这是因为U、V是图像中的经过偏置处理的色度分量。色度分…...
Asp.Net Core服务端处理请求过来的压缩格式
之前是直接传没有经过压缩的文件字节,有时文件过大的话,可能占宽带就多,宽带流量都是钱。后来有个想法,在客户端把文件进行压缩,把压缩的文件流发给服务端进行解压。 1,先修改项目中Startup.cs文件中Confi…...
自定义指令
二、自定义指令 1.指令介绍 内置指令:v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令,可以直接使用 自定义指令:同时Vue也支持让开发者,自己注册一些指令。这些指令被称为自定义指令 每个指令都有自己各自独立的功…...
仿真实现lio_sam建图和ndt_matching定位
文章目录 一、仿真环境二、lio_sam建图1.修改配置文件2.开始建图 三、ndt_matching定位1.新建启动文件2.启动 总结 一、仿真环境 使用现有开源的仿真环境—从零开始搭建一台ROS开源迷你无人车,作者已经配置好小车模型以及gazebo环境,imu频率已改为200HZ…...
IDEA取消git对项目的版本控制
前言 前几天新建项目的时候不小心选了个git仓库,导致这个测试项目一直被git管理着。 解决办法 1 右键项目 选择打开资源目录 2 删除.git文件 把目录下的.git文件删掉 3 删除idea中的git管理 删除完.git文件后,进入idea,右下角会有这样的提…...
如何聪明地编写测试
作者|Maxim Schepelin Booking公司软件开发工程师 编译整理|TesterHome 以下为作者观点: 在我(作者)的职业生涯中,我多次看到团队如何开始自动化测试,当然并非所有尝试都成功。在这篇文章中…...
CF1866M Mighty Rock Tower
CF题面 luogu题面 期望题。 题目大意:一个人在搭积木,每次堆叠可能成功或失败,失败可能导致其下面连续的若干块掉落。给定搭每一块时失败的概率,求堆叠完成的期望次数。 具体的,假设当前正在堆叠第 i 块,…...
【漏洞复现】Apache_Tomcat7+ 弱口令 后台getshell漏洞
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 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 分钟发布会:演示关于 GPT Store 构建 GPT、零代码创建 AI Agent前言Sam Altman 正在创建一个「创业导师 GPT」零代码创建 AI AgentAssistants API 封装的能力包括 Sam Altman 对发布会总结相关链接弘扬爱国精神 …...
嵌入式系统中的FPGA
举个栗子 假设你有一台智能家居系统,其中的FPGA可以被类比为智能家居中的中央控制器。 智能家居系统: 定制家居逻辑: 你希望智能家居系统能够根据你的生活习惯、时间表和喜好自动控制灯光、温度、窗帘等设备。就像FPGA中可以根据需求重新配置…...
String,StringBulider,StringBuffer的简单说明
目录 1.String 2.StringBuffer 3.StringBuilder 4.线程安全的验证 1.String String是声明在java.lang下的一个类。 String被定义为final,表示不能被继承。内部定义了final char value[]用于存储字符串数据,所以String对象的值是不可改变的。每次对S…...
Python编程题集(第一部分基本语法基础)
Demo01 摄氏温度转化为华氏温度 题目描述: 输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出 转换的公式为如下:fahrenheit (9 / 5 ) * celsius 32 输入输出描述 输入一个值表示摄氏温度celsius 输出华氏温度fahren…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
