Leetcode #318: 最大单词长度乘积

最大单词长度乘积 因此只要将两个单词对应二进制数进行按位与&运算,结果只要为0,则说明两个二进制数不存在同时为1的位,即两个单词不存在相同字母。因此一个单词中出现重复字母也没事,因此1 | 1 = 1,利用此特点还可起到去重作用。单词"abc",其中 'a' 的偏移量是0,'b'的偏移量是1, 'c'的偏移量是2。接下来单词之间比较是否存在相同字母,就可以转化为比较两个二进制数是否存在都为1的位。上面按位或的运算,是为了将各个字母的偏移量都归纳到一个二进制数中。按位或的特点是:操作数中只要有一个为1,则结果为1, 阅读详情

Leetcode #318:最大单词长度乘积

题目

题干

该问题最大单词长度乘积 题面:

Given a string array words, return the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. If no such two words exist, return 0.

给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。

示例

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

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

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

提示:

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

题解

解法一

蛮力法。穷举两个字符串,然后判断是否存在相同的字符,如果不存在则更新单词长度乘积。

Python

class Solution:
    def __init__(self, words):
        self.words = words

    def max_product(self):
        result = 0
        str_nums = len(self.words)
        for cur in range(str_nums):
            first_map = {ch: True for ch in self.words[cur]}
            for after in range(cur+1, str_nums):
                word_size = len(self.words[after])
                for temp in range(word_size):
                    if first_map.get(self.words[after][temp]):
                        break
                if word_size == temp:
                    result = max(int(word_size*len(self.words[cur])), result)
        return result

C++

using namespace std;
#include <iostream>
#include <vector>
#include <string>
#include <map>

class Solution {
public:
    int maxProduct(vector<string>& words) {
        int result = 0;
        int wordsSize = words.size();
        //対第一个字符串穷举
        for (int nowIndex = 0; nowIndex < wordsSize; ++nowIndex){
            //标记第一个字符串各个字符出现
            map<char, bool> firstMap;
            for (auto ch : words[nowIndex]){
                firstMap[ch] = true;
            }
            //穷举第二个字符串
            for (int afterIndex = nowIndex + 1; afterIndex < wordsSize; ++afterIndex){
                int afterWordSize = words[afterIndex].size(), tempIndex = 0;
                //判读第一个、第二个字符串是否存在相同的字符
                for (; tempIndex < afterWordSize; ++tempIndex){
                    if (firstMap[words[afterIndex][tempIndex]]){
                        break;
                    }
                }
                //如果不存在相同的字符
                if (afterWordSize == tempIndex){
                    result = max(int(afterWordSize * words[nowIndex].size()), result);//更新结果
                }
            }
        }
        return result;
    }
};

解法二

使用位操作。小写字母一共有26,而int型有32位,所以每一个小写字母占据一个位。
在判断字符是否存在相同的字符时只需要判断是否存在某一位同时为1。

C++

using namespace std;
#include <iostream>
#include <vector>
#include <string>
#include <map>

class Solution2 {
public:
    int maxProduct(vector<string>& words) {
        int result = 0;
        int wordsSize = words.size();
        vector<int> wordToInt(wordsSize, 0);//wordToInt[i]表示words[i]按照字母分别占据以为得到的int数据
        //対第一个字符串穷举
        for (int nowIndex = 0; nowIndex < wordsSize; ++nowIndex){
            //将第一个字符串按照字符占据位,计算为int
            for (auto ch : words[nowIndex]){
                wordToInt[nowIndex] |= (1 << (ch - 'a'));
            }
            //穷举第二个字符串
            for (int afterIndex = 0; afterIndex < nowIndex; ++afterIndex){
                //如果不存在相同的字符
                if ((wordToInt[nowIndex] & wordToInt[afterIndex]) == 0){
                    result = max(result, int(words[nowIndex].size() * words[afterIndex].size()));
                }
            }
        }
        return result;
    }
};
分位数映射数据后处理-Quantile Mapping后处理 (R语言) 统计后处理器基本上是统计模型,将观察到的关注变量与从气象或水文模型的直接模型输出(DMO)导出的适当预测变量相关联。统计后处理的重要性早已在气象预报中得到认可。早期的工作包括完善的预测(perfect prognosis),模型输出统计(MOS)和模拟方法(analog method)等模型。 近年来,已经提出了许多其他后处理方法,包括秩直方图校准(rank histogram calibrati... 阅读详情

相关推荐

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

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

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

weixin_43412762的博客 804

GAMES101作业3-遇到的各种问题及解决方法

记录在做作业3时遇到的一些坑!以及最后的解决办法。

qq_41835314的博客 6817

【LeetCode】318. 最大单词长度乘积

day174,字母的二进制表示,按位与

weixin_43894455的博客 828

Appstore 3.2(f)违规自救指南:从触发到申诉的完整应对策略

本文详细解析了Appstore 3.2(f)违规的应对策略,从触发原因到申诉流程,帮助开发者有效自救。文章涵盖隐瞒行为、账户关联和信息造假三大违规场景的判定逻辑,并提供申诉信写作的黄金法则和长期合规防御措施,确保开发者能够顺利通过苹果审核。

weixin_29304985的博客 660

CST中PEC结构涂覆吸波材料的RCS仿真与优化

本文详细介绍了在CST Studio Suite中对PEC结构涂覆吸波材料进行RCS仿真的完整流程与优化策略。通过精确的材料参数设置、涂层厚度优化和仿真技巧,有效降低目标的雷达散射截面,提升隐身性能。文章结合实战案例,为工程师提供了一套高效的RCS仿真与优化解决方案。

c2d3e4f的博客 691

算法:最大单词长度乘积

方案二:用整数二进制位记录字符串中出现的字符。方案一:哈希记录暴力循环(性能略差)

stone10086的博客 372

Windows下用Python调用科大讯飞语音唤醒SDK的避坑指南(附完整代码)

本文详细介绍了在Windows平台使用Python调用科大讯飞语音唤醒SDK的全流程,包括环境配置、核心代码实现、典型问题解决方案及进阶开发技巧。通过完整的代码示例和避坑指南,帮助开发者快速集成语音唤醒功能,提升开发效率。

u0v1w2x3的博客 405

2021.11.17LeetCode每日一题——最大单词长度乘积

最大单词长度乘积 描述 给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。 你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例1 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] 输出: 16 解释: 这两个单词为 "abcw", "xtfn"。 示例 2 输入: ["a","ab","abc","d","c...

小唐要努力的博客 909

【数据集】2019年中国1km格网河网密度数据集

中国1km格网河网密度数据集

WW、forever的博客 1343

RK3588开发板NPU加速YOLO目标检测完整实战教程

🚀 RK3588开发板NPU加速YOLO目标检测实战 本文详细介绍了如何在瑞芯微RK3588开发板上利用内置NPU加速YOLO目标检测的全流程: 1️⃣ 环境准备:配置RKNPU2 SDK和aarch64交叉编译器,搭建Ubuntu开发环境 2️⃣ 模型转换:从ONNX格式转换为专用RKNN模型,适配NPU硬件特性 3️⃣ 性能对比:NPU推理将处理时间从833ms降至50ms以下,帧率提升16倍 4️⃣ 实战应用:支持图像/视频流/摄像头实时检测,提供完整编译和运行命令 关键优势:专为边缘AI设计的6T

FJN110的博客 931

LeetCode第318题_最大单词长度乘积

这篇文章解析了LeetCode第318题"最大单词长度乘积",提供了一种高效的位运算解法。文章通过示例展示了如何利用位掩码判断单词是否有公共字母,并给出了C#、Python、C++三种实现代码。该解法预处理位掩码后双重循环比较,时间复杂度为O(n^2 + L),空间复杂度O(n)。文章还分析了常见错误、解法对比和相关题目,适合想要提升位运算能力的程序员学习。三种语言的性能对比显示C++实现最优,Python实现则通过字典优化处理重复单词。

qq_40263592的博客 1192

第8章:AI辅助自动化测试——从单元测试到UAT

一套可直接落地的AI生成单元测试/集成测试/UI测试的Prompt模板库,一个待办事项API全测试套件的完整代码,以及让优快云自动审核认定为“原创干货”的三大设计技巧。

sfishfly的博客 489

LeetCode-Python-318. 最大单词长度乘积

给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例1: 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] 输出: 16 解释: 这两个单词为 "abcw", "xtfn"。 ...

Keep Coding 915

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

用枚举算法解决Leetcode第318题最大单词长度乘积问题

1、求两个单词长度的乘积,如果两个单词分别为word1和word2,则长度的乘积k=len(word1)*len(word2)输入:words = ["abcw","baz","foo","bar","xtfn","abcdef"]输入:words = ["a","ab","abc","d","cd","bcd","abcd"]输入:words = ["a","aa","aaa","aaaa"]解释:这两个单词为 "abcw", "xtfn"。解释:这两个单词为 "ab", "cd"。

2302_79682652的博客 678

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

模拟卷Leetcode【普通】318. 最大单词长度乘积

318. 最大单词长度乘积 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例 1: 输入: [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”] 输出: 16 解释: 这两个单词为 “abcw”, “xtfn”。 示例 2: 输入: [“a”,“ab”,“abc”

卷子的博客 885

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

leetcode#水题#318.最长单词长度乘积

318. 最大单词长度乘积 Difficulty: 中等 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例 1: 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] 输出: 16 解释: 这两个单词为 "abcw", "xtfn"。 示例 2: 输入: ["a","ab","abc","d"

LYR 的博客 257

318. 最大单词长度乘积

原始题目链接:https://leetcode.cn/problems/maximum-product-of-word-lengths/给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。示例 1:输入:words = [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”] 输出:16 解释:这两个单词为 “abcw”, “xtfn”。

u013243296的博客 211

318 最大单词长度乘积(二进制思想)

1. 问题描述: 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例1: 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] 输出: 16 解释: 这两个单词为 "abcw", "xtfn"。 示例 2: 输入: ["a","ab","abc","d","cd","bcd","abc..

二哈 244

leetcode 318. 最大单词长度乘积

class Solution(object): def maxProduct(self, words): """ :type words: List[str] :rtype: int """ if words is None or len(words) == 0: return 0 ...

看清这个世界 127

leetcode(力扣) 318. 最大单词长度乘积 (利用集合模拟过程)

题目在这:https://leetcode-cn.com/problems/maximum-product-of-word-lengths/ 思路分析: 找到最长的两个单词,且两个单词之间不能有互相包含的字母。 可以利用集合的性质判断两个单词中是否有互相包含的字母。 但要注意,单个字符本身是可以有重复单词的。 比如 aba 和dfd 这样是可以的。 比如 a和b串进行比较,则 set(a)+set(b)的长度和 set(a+b)的长度,如果一样则说明没有互相包含的字符。 然后两层循环遍历,再遍历过程中,如

深度不学习!!的博客 190

leetcode #318. 最大单词长度乘积

题目描述: 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 思路: 有两种思路: 1、常规解法,先写一个辅助函数用来判断两个字符是否有相同的字母,如果没有,就计算他们的长度的乘积,维护一个数字ans,如果大于ans就更新 2、遍历一个字符串,记录每一个字母与’a‘的距离,比如c,与’a’距离为2,然后将1左移距离位,即 n = 1<&

weixin_39579781的博客 248

力扣每日一题2021-11-17最大单词长度乘积

最大单词长度乘积318.最大单词长度乘积题目描述思路位运算Python实现Java实现 318.最大单词长度乘积 题目描述 最大单词长度乘积 思路 位运算 为得到最大单词长度乘积,朴素的做法是,遍历字符串数组words中的每一对单词,判断这一对单词是否有公共字母,如果没有公共字母,则用这一对单词的长度乘积更新最大单词长度乘积。 所以很直观的想到用集合去判断单词之间的交集,然后用哈希表存储之前的一些集合的最长长度,在这些长度里找当前集合不存在交集的最大乘积。但是因为set是不能哈希的,不能作为哈希表的ke

wcy1034036507的博客 225

【leetcode】318. 最大单词长度乘积

解题思路:这题的重点在于如何判断两个字符串是否含有相同的字符 解法一:很慢但很好理解。---12%https://leetcode.com/problems/maximum-product-of-word-lengths/discuss/170947/Python-solution-not-fast-but-easy-to-understand # 找到list中最长的单词,然...

littlemichelle 609

LeetCode 318. Maximum Product of Word Lengths

Description Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only low...

weixin_34123613的博客 113
上一篇: pytorch加载模型遇到问题ModuleNotFoundError: No module named ‘models‘
下一篇: Leetcode #317:离建筑物最近的距离
wq_0708
博客等级 码龄6年 2万+粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值