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

题目在这:https://leetcode-cn.com/problems/maximum-product-of-word-lengths/

思路分析:

找到最长的两个单词,且两个单词之间不能有互相包含的字母。
可以利用集合的性质判断两个单词中是否有互相包含的字母。
但要注意,单个字符本身是可以有重复单词的。
比如 aba 和dfd 这样是可以的。

比如 a和b串进行比较,则 set(a)+set(b)的长度和 set(a+b)的长度,如果一样则说明没有互相包含的字符。

然后两层循环遍历,再遍历过程中,如果不相互包含字母,则记录当前最大的长度。

完整代码

class Solution:
    def maxProduct(self, words: List[str]) -> int:
        s = words
        res = 0
        for i in range(len(s)-1):
            for j in range(i+1,len(s)):
                temp =  ''.join(set(s[i])) +  ''.join(set(s[j])) # 集合变为字符串格式~
                temp_set = set(s[i]+s[j])
                 if len(temp) == len(temp_set):
                    res = max(res,len(s[i]) * len(s[j]))
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值