[LeetCode By Python] 318. Maximum Product of Word Lengths

一、题目

Maximum Product of Word Lengths

二、解题

输入:一个字符串列表
输出:计算每两个没有交集的字符串,算出乘积最大的。
常规解法,两重遍历,判断两个数是否没有交集,使用转外为list和set对比长度,一样则返回True。

三、尝试与结果

class Solution(object):
    def isDiff(self,a,b):
        s = a+b
        if len(list(s)) == len(set(list(s))):
            return True
        else:
            return False

    def maxProduct(self, words):
        maxLen = 0 
        for i in range(len(words)):
            for j in range(i,len(words)):
                if self.isDiff(words[i],words[j]):
                    lens = len(words[i]) * len(words[j])
                    maxLen = lens if lens>maxLen else maxLen
        return maxLen

结果:TL

再次尝试,使用二进制。

class Solution(object):
    def fomatWord(self,words):
        fwords = []
        for word in words:
            fword = 0
            for letter in word:
                fword |= 1 << ord(letter) - ord('a')
            fwords.append(fword)
        return fwords

    def isDiff(self,a,b):
        if a & b == 0:
            return True
        else:
            return False

    def maxProduct(self, words):
        fwords = self.fomatWord(words)
        maxLen = 0 
        for i in range(len(words)):
            for j in range(i + 1,len(words)):
                if self.isDiff(fwords[i],fwords[j]):
                    lens = len(words[i]) * len(words[j])
                    maxLen = lens if lens>maxLen else maxLen
        return maxLen

结果:AC

说明:
1)把每一个单词,都转化为二进制数,规则是把26个英文字母映射到二进制数的每一位,例如a映射到第0位、b第一位。如果一个数是abc,那么这个数是00,0000,0000,0000,0000,0000,0111。
2)进行这个操作是通过二进制移位,然后或上本身,fword |= 1 << ord(letter) - ord('a'),当letter是b时,ord(letter)-ord('a')等于1,把1往左移1位(其实就是把第二位变成了1、即存在b,第二位变为1)。
3)两个数不同是通过a & b = 0来实现的,因为没有相同字母,意味着两个数在任意一位上,都不同(0和1),而0&1 = 0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 3,966评论 0 0
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,606评论 1 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 8,343评论 1 9
  • Java源码 Integer Integer的签名如下,继承了Number类并实现Comparable接口 Com...
    wngn123阅读 4,971评论 0 2

友情链接更多精彩内容