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

静态网页建站装饰画

静态网页建站,装饰画,推荐专业的外贸建站公司,中介网站模板文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:最大单词长度乘积 出处:318. 最大单词长度乘积 难度 4 级 题目描述 要求 给定一个字符串数组 words \texttt{words} words&#xff0…

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:最大单词长度乘积

出处:318. 最大单词长度乘积

难度

4 级

题目描述

要求

给定一个字符串数组 words \texttt{words} words,返回 length(words[i]) × length(words[j]) \texttt{length(words[i])} \times \texttt{length(words[j])} length(words[i])×length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 \texttt{0} 0

示例

示例 1:

输入: words = ["abcw","baz","foo","bar","xtfn","abcdef"] \texttt{words = ["abcw","baz","foo","bar","xtfn","abcdef"]} words = ["abcw","baz","foo","bar","xtfn","abcdef"]
输出: 16 \texttt{16} 16
解释:这两个单词为 "abcw" \texttt{"abcw"} "abcw" "xtfn" \texttt{"xtfn"} "xtfn"

示例 2:

输入: words = ["a","ab","abc","d","cd","bcd","abcd"] \texttt{words = ["a","ab","abc","d","cd","bcd","abcd"]} words = ["a","ab","abc","d","cd","bcd","abcd"]
输出: 4 \texttt{4} 4
解释:这两个单词为 "ab" \texttt{"ab"} "ab" "cd" \texttt{"cd"} "cd"

示例 3:

输入: words = ["a","aa","aaa","aaaa"] \texttt{words = ["a","aa","aaa","aaaa"]} words = ["a","aa","aaa","aaaa"]
输出: 0 \texttt{0} 0
解释:不存在这样的两个单词。

数据范围

  • 2 ≤ words.length ≤ 1000 \texttt{2} \le \texttt{words.length} \le \texttt{1000} 2words.length1000
  • 1 ≤ words[i].length ≤ 1000 \texttt{1} \le \texttt{words[i].length} \le \texttt{1000} 1words[i].length1000
  • words[i] \texttt{words[i]} words[i] 只包含小写英语字母

解法

思路和算法

为了得到最大单词长度乘积,需要遍历数组 words \textit{words} words 中的每一对单词,判断两个单词是否含有公共字母,如果没有公共字母则计算这两个单词长度的乘积。对于长度为 n n n 的数组 words \textit{words} words,遍历每一对单词需要 O ( n 2 ) O(n^2) O(n2) 的时间,如果通过遍历两个单词判断两个单词是否含有公共字母,则时间复杂度高于 O ( n 2 ) O(n^2) O(n2)。为了降低时间复杂度,需要在 O ( 1 ) O(1) O(1) 的时间内判断两个单词是否含有公共字母,则时间复杂度是 O ( n 2 ) O(n^2) O(n2)

为了在 O ( 1 ) O(1) O(1) 的时间内判断两个单词是否含有公共字母,需要使用位运算。由于每个单词只包含小写英语字母,共有 26 26 26 个字母,因此每个单词可以使用 26 26 26 位二进制数表示该单词中出现的字母。具体表示方法是,二进制表示从低到高的第 0 0 0 位到第 25 25 25 位的每一位分别表示单词中是否出现 a \text{a} a z \text{z} z 的每个字母,如果一个二进制位是 1 1 1 则表示该位对应的字母在单词中出现,如果一个二进制位是 0 0 0 则表示该位对应的字母不在单词中出现。

得到每个单词的二进制表示之后,判断两个单词是否含有公共字母时,可以计算这两个单词对应的二进制表示的按位与运算结果。如果按位与运算结果是 0 0 0,则这两个单词不含有公共字母;如果按位与运算结果不是 0 0 0,则这两个单词含有公共字母,按位与运算结果中不是 0 0 0 的位表示公共字母。只有当按位与运算结果是 0 0 0 时,才需要计算这两个单词长度的乘积,并更新最大单词长度乘积。

代码

class Solution {public int maxProduct(String[] words) {int length = words.length;int[] masks = new int[length];for (int i = 0; i < length; i++) {String word = words[i];int wordLength = word.length();for (int j = 0; j < wordLength; j++) {char c = word.charAt(j);masks[i] |= 1 << (c - 'a');}}int maxValue = 0;for (int i = 0; i < length; i++) {for (int j = i + 1; j < length; j++) {if ((masks[i] & masks[j]) == 0) {int value = words[i].length() * words[j].length();maxValue = Math.max(maxValue, value);}}}return maxValue;}
}

复杂度分析

  • 时间复杂度: O ( n 2 + L ) O(n^2 + L) O(n2+L),其中 n n n 是数组 words \textit{words} words 的长度, L L L 是数组 words \textit{words} words 中的所有单词的长度之和。计算每个单词的二进制表示需要 O ( L ) O(L) O(L) 的时间遍历所有单词,计算最大单词长度乘积需要 O ( n 2 ) O(n^2) O(n2) 的时间遍历每一对单词,因此时间复杂度是 O ( n 2 + L ) O(n^2 + L) O(n2+L)

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 words \textit{words} words 的长度。需要创建长度为 n n n 的数组存储每个单词的二进制表示。

http://www.dtcms.com/a/500035.html

相关文章:

  • 电商运营如何提升自身技能素质
  • iptables 防火墙详解与实用配置指南
  • 湖南网站建设加盟代理企业微营销网站
  • 可以大量免费发帖的网站wordpress存档显示文章所有内容
  • BPMN.js与LogicFlow流程设计器核心技术解析
  • python程序打包成win的exe应用(以OCR应用为例)
  • 建设营销型网站价格wordpress固定连接nginx
  • DRF:Django REST Framework框架介绍
  • 不备案 网站 盈利合肥做个网站多少钱
  • 做网站只用php不用html扬中网站建设哪家好
  • Linux内核idr数据结构使用
  • 3.3栈与队列的应用
  • 黑龙江网站开发公司宁波网站建设制作的公司
  • 《CopyOnWriteArrayList / CopyOnWriteArraySet 源码与“大对象复制”事故实录》
  • 做网站的品牌公司有哪些安康市110报警平台
  • 三水住房和城乡建设局的网站一键生成logo免费图
  • 自用EUBIU
  • 省住房城乡建设厅网站保险查询平台
  • 智能PDU在数据中心场景中的应用与解决方案
  • 网站登录界面图片用什么软件做深圳关键词优化报价
  • 中信建设证券官方网站佛山网页设计怎么做
  • Tomcat 类加载器隔离机制的实际应用
  • 咨询网站 模板国泰君安官方网站建设集团
  • Go基础知识(一)
  • 网站开发c外贸企业邮箱哪个好用
  • 鸿蒙Next振动开发指南:打造沉浸式触觉反馈体验
  • 网站美工外包公司改号宝网站搭建
  • h5游戏免费下载:滑雪大挑战
  • 高端制作网站哪家专业湖北建设工程注册中心网站
  • 包管理 pip ,conda;pycharm中使用conda 创建的虚拟环境