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

  1. 最大单词长度乘积

难度:中等

问题描述:

给你一个字符串数组 words ,找出并返回 length(wordsi) * length(wordsj) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 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 <= wordsi.length <= 1000

wordsi 仅包含小写字母

这个问题可以借助枚举算法来解决

枚举算法的基本思想是列举出问题所有可能的解,然后检验每一个列举是否为问题真正的解。它涉及到三个重要步骤:确定研究范围、列举和检验。

具体到本题中

研究范围:words数组中所有的单词构成的两两组合

列举:利用二重循环遍历出words中不同的单词组合

检验:对取出的两个单词判断是否有公共字符,如果没有,再检验字符长度的乘积是否最大

实现依据:

1、求两个单词长度的乘积,如果两个单词分别为word1和word2,则长度的乘积k=len(word1)*len(word2)

2、如何判断两个单词没有公共字母?对于两个单词word1和word2,先将其转换为集合分别去掉重复字符,然后观察集合的长度之和与它们并集的长度是否相等,如果相等,说明没有公共字符,否则有。

程序如下:

python 复制代码
#检查是否有公共字符,如果有返回True,否则返回False
def checkshare(word1,word2):
    word1=set(word1)
    word2=set(word2)
    word=word1|word2
    if len(word)==len(word1)+len(word2):
        return False
    else:
        return True

#利用二重循环枚举,返回满足条件的最大单词长度乘积
def maxproduct(words):
    n=len(words)
    maxlen=0
    for i in range(n-1):
        for j in range(i+1,n):
            k=len(words[i])*len(words[j])
            if (not checkshare(words[i],words[j])) and k>maxlen:
                maxlen=k
    return maxlen

#输入
words=eval(input('pls input words='))

#输出
print(maxproduct(words))

运行实例一

pls input words='abc','def','cdefgh','ijklmn'

36

运行实例二

pls input words='ab','ac','cd','defgh'

10

感悟:长城不是一天修成的,不必太在意题的难易,只要脚踏实地,认认真真解决好每一道题,必然有所收获。

相关推荐
布莱克6057 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
卷无止境9 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
D e re k ZH10 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
灿飞屋10 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc10 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
石小石Orz10 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机12 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂12 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
文丑颜不良啊13 小时前
LeetCode2261~2280题目解析
java·leetcode