( 位运算 ) 318. 最大单词长度乘积 ——【Leetcode每日一题】

news2024/11/29 6:39:29

❓318. 最大单词长度乘积

难度:中等

给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0

示例 1:

输入:words = [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]
输出:16
解释:这两个单词为 “abcw”, “xtfn”。

示例 2:

输入:words = [“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abcd”]
输出:4
解释:这两个单词为 “ab”, “cd”。

示例 3:

输入:words = [“a”,“aa”,“aaa”,“aaaa”]
输出:0
解释:不存在这样的两个单词。

提示:

  • 2 <= words.length <= 1000
  • 1 <= words[i].length <= 1000
  • words[i] 仅包含小写字母

💡思路:位运算

基础知识必知:一篇文章搞懂位运算 !

本题主要问题是判断 两个字符串是否含相同字符:

  • 由于字符串只含有小写字符,总共 26 位,因此可以用一个 32 位的 整数 来存储每个字符是否出现过。
  • 然后对每个「字符对」所对应的两个 int 值执行 & 操作,来判断是否无重复字符,若两字符无重复字符,则结果为 0

🍁代码:(Java、C++)

Java

class Solution {
    public int maxProduct(String[] words) {
        int n = words.length;
        int[] val = new int[n];
        for(int i = 0; i < n; i++){
            for(char c : words[i].toCharArray()){
                val[i] |= 1 << (c - 'a');
            }
        }
        int ans = 0;
        for(int i = 0; i < n - 1; i++){
            for(int j = i + 1; j < n; j++){
                if((val[i] & val[j]) == 0){
                    ans = Math.max(ans, words[i].length() * words[j].length());
                }
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    int maxProduct(vector<string>& words) {
        int n = words.size();
        vector<int> val(n);
        for(int i = 0; i < n; i++){
            for(char c : words[i]){
                val[i] |= 1 << (c - 'a');
            }
        }
        int ans = 0;
        for(int i = 0; i < n - 1; i++){
            for(int j = i + 1; j < n; j++){
                if((val[i] & val[j]) == 0){
                    ans = max(ans, int(words[i].size() * words[j].size()));
                }
            }
        }
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( L + n 2 ) O(L+n^2) O(L+n2),其中 L 是数组 words 中的全部单词长度之和,n 是数组 words 的长度。

    • 预处理每个单词的位掩码需要遍历全部单词的全部字母,时间复杂度是 O ( L ) O(L) O(L)
    • 然后需要使用两重循环遍历位掩码数组 val 计算最大单词长度乘积,时间复杂度是 O ( n 2 ) O(n^2) O(n2)
    • 因此总时间复杂度是 O ( L + n 2 ) O(L+n^2) O(L+n2)
  • 空间复杂度 O ( n ) O(n) O(n),其中 n 为数组 words 的长度,需要创建长度为 n 的位掩码数组 val

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqlmap对dvwa靶场的账号密码进行破解

1.进行靶场搭建 准备两台虚拟机 靶机&#xff1a;win7 攻击机&#xff1a;kali linux win7IP 172.26.0.130kali linuxIP 172.26.0.129 虚拟机搭建好后,相互ping能ping同就行 安装xampp XAMPP Installers and Downloads for Apache FriendsXAMPP is an easy to install…

数字化赋能,探索智慧银行建设的最佳实践

导语 | 数字经济时代&#xff0c;数字化已成为银行业转型升级的战略手段。近年来&#xff0c;商业银行纷纷加大对信息科技的投入&#xff0c;数字化在改变银行业务模式的同时&#xff0c;更是构建起了数字金融新生态。今天&#xff0c;我们特邀腾讯云 TVP 行业大使、舜源科技合…

值传递、引用传递

​​​​​辟谣时间 错误理解一&#xff1a;值传递和引用传递&#xff0c;区分的条件是传递的内容&#xff0c;如果是个值&#xff0c;就是值传递。如果是个引用&#xff0c;就是引用传递。 错误理解二&#xff1a;Java是引用传递。 错误理解三&#xff1a;传递的参数如果是普通…

国内有哪些SAAS软件?SAAS软件有哪些优点?

国内有哪些SAAS软件&#xff1f;SAAS软件有哪些优点&#xff1f;不请自来答一下&#xff0c;通过SaaS软件与传统软件的对比来详细讲下SaaS软件有哪些优点&#xff1f; 配合以下内容食用更佳&#xff1a; 关于概念——深度详解什么是SaaS&#xff08;软件即服务&#xff09;关…

项目报告:turtle画小猪佩奇

目录 项目&#xff1a;一、项目思路二、项目实战1. 导入模块2. 创建画布3. 绘制鼻子4. 绘制猪头5. 绘制耳朵6. 绘制眼睛7. 绘制脸8. 绘制嘴9. 绘制身体10.绘制手11.绘制脚12.绘制尾巴 三、项目展示 总结&#xff1a; 项目&#xff1a; ​ 我们做的项目是小猪佩奇绘画的一个项目…

农场农庄偷菜卖菜h5多端流量主小程序开发

农场农庄偷菜卖菜h5多端流量主小程序开发 种菜&#xff0c;收菜&#xff0c;偷菜&#xff0c;卖菜&#xff09;玩法。 功能&#xff1a;动态背包&#xff0c;动态排行榜&#xff0c;定时收获&#xff0c;广告组件接入&#xff0c;背景音乐&#xff0c;按钮点击声音接入&#x…

多线程概念,常用接口与多进程之间的比较

多线程概念&#xff0c;常用接口与多进程之间的比较 多线程概念与常用接口多线程概念与相对于线程的区别什么是多线程&#xff08;概念&#xff09;进程和线程的区别在Linux系统下&#xff0c;进程和线程的区别如下&#xff1a;多进程和多线程优缺点比较&#xff1a;在多任务处…

国产仪器 1612A无线信道仿真器

1612A无线信道仿真器是一款专门的无线信道仿真设备&#xff0c;可准确实时仿真复杂的无线信道特征&#xff0c;包含路径损耗、延迟、多径衰落以及噪声等&#xff0c;重现真实的信号传播环境&#xff0c;用于对比测试及反复测试&#xff0c;加快问题的发现及解决的过程。本产品突…

canvas学习笔记

其实还有react还没有学&#xff0c;但是公司技术栈里面有canvas&#xff0c;所以先系统学习一下canvas 一、canvas 简介 ​<canvas> 是 HTML5 新增的&#xff0c;一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也…

微服务之服务间通信:关于Feign的练习demo

一、主要流程&#xff1a; 创建两个最基础的springboot项目调用方引入Feign的依赖在调用方服务项目中创建agent接口类&#xff0c;类使用FeignClient注解&#xff0c;注解重点配置url&#xff08;即被调用方服务所在的地址ip端口号&#xff09;、写接口方法等。在具体业务代码…

Softing邀您参加第16届诊断大会

第16届机电车辆系统诊断大会将于2023年5月23-24日在德累斯顿举行。今年的主题将再次围绕预测性维护、远程诊断、机器学习、标准化以及检验和ePTI方面的当前挑战和新技术展开。 在5月23日&#xff08;周二&#xff09;&#xff0c;Softing汽车电子的创新与测试经理-Jrgen Heilm…

【FMC147】 基于VITA57.4标准的单通道6GSPS 12位采样ADC,单通道 6GSPS 16位采样DAC子卡模块

板卡概述 FMC147是一款单通道6.4GSPS&#xff08;或者配置成2通道3.2GSPS&#xff09;采样率的12位AD采集、单通道6GSPS&#xff08;或配置成2通道3GSPS&#xff09;采样率16位DA输出子卡模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.4规范&#xff0c;该模块可以作…

React 内 JSX了解及使用

Jsx的全称是Javascript XML&#xff0c;react定义的一种类似XML的JS拓展语法&#xff1a;JSXML&#xff0c;使我们可以用类似于xml方式描述视图。 本质是React.createElement(component, props, ...children) 的语法糖 原理&#xff1a;babel-loader会预编译JSx为React.creat…

【论文阅读-TPAMI2021】Curriculum Learning(课程学习)综述

简介 Curriculum learning (CL&#xff0c;课程学习)是一种模型训练策略&#xff0c;通过先让模型学习简单数据后再学习困难数据的方式模拟学生进行课程学习的场景。通用的课程学习框架为Difficulty Measurer &#xff08;困难程度评估&#xff09; Training Scheduler&#x…

基于分页实现数据的增删查改

一&#xff1a;主要思路 1:分页功能: 新建一个实体类&#xff0c;用来存储每页数据&#xff0c;数据量&#xff0c;页码&#xff0c;页数&#xff0c;下一页&#xff0c;上一页的相关信息。 Data public class PageModel<T> {//本页数据private List<T> pageDat…

当年差点把我折磨疯的DOS下的打字游戏

最近群里有人喊有没有好用的打字游戏&#xff0c;想给学生找点事儿做&#xff0c;省得他们调皮。我就突然想到当年差点把我折磨疯的这个TT游戏。 记得之前有一个版本我可以使用&#xff0c;打开一看自己当初还写了一段好简单的介绍&#xff0c;就一行字 把tt.com文件拖到DOSB…

C. Plasticine zebra(思维)

Problem - C - Codeforces 这道题目要求你从一个由b和w组成的字符串中选择连续的、交替出现的颜色块来拼出斑马纹路&#xff0c;然后对这个字符串进行零次或多次的切分、翻转和粘合操作&#xff0c;以达到最大的斑马长度。 具体来说&#xff0c;Grisha想要选择若干连续的、交替…

STM32HAL库 总线舵机驱动库的编写

STM32 HAL库 总线舵机驱动库的编写 文章目录 STM32 HAL库 总线舵机驱动库的编写1 理论基础1.1 硬件1.2 电路图1.3 原理1.4 通信协议 2 程序编写2.1 cube mx设置&#xff08;1&#xff09;USART1设置&#xff08;2&#xff09;USART3设置 2.2 程序编写&#xff08;1&#xff09;…

【C程序设计】——最简单的C语言程序

目录 &#x1f34a;&#x1f34a;一、最简单的C语言程序 1.1 最简单的C语言程序举例 1.2 C语言程序的结构 首先&#xff0c;让我们先了解一下C语言的特点&#xff1a; 语言简洁、紧凑&#xff0c;使用方便、灵活&#xff1b;运算符丰富&#xff1b;数据类型丰富&#xff1b…

806. 写字符串需要的行数

806. 写字符串需要的行数 一、题目描述&#xff1a; 我们要把给定的字符串 S 从左到右写到每一行上&#xff0c;每一行的最大宽度为100个单位&#xff0c;如果我们在写某个字母的时候会使这行超过了100 个单位&#xff0c;那么我们应该把这个字母写到下一行。我们给定了一个数…