Maximum Product of Word Lengths

要点:一开始的方法想错了,以为可以用并查集做,把凡是有相同char的word放到同一组中,然后在不同的组之间做乘法。但是后来发现这个想法有bug,比如ab,bc,cd是同一组,但是ab和cd也可以做乘法。所以并查集的适用条件是所有元素要共享某种条件(当然这种共享条件在前面process的时候不一定available),而不是两两之间。
另一种方法是用intersection:还是先encode每个string(26位bitset),然后用es[c]表示不包含c的word集合。这样就可以避免内层循环来找不相交的word,而是所有当前字符的不存在集合的交集中找即可。复杂度降低了点,但实际上code更花时间。只需要记住方法。

class Solution(object):def maxProduct(self, words):""":type words: List[str]:rtype: int"""es = []for w in words:es.append(sum(1 << (ord(c)-ord('a')) for c in set(w))) # error 1: not using set(w), wrong ["a","aa","aaa","aaaa"]maxLen = 0for i in xrange(len(words)-1):for j in xrange(i+1, len(words)):if not (es[i] & es[j]):if maxLen<len(words[i])*len(words[j]):maxLen = len(words[i])*len(words[j])return maxLen

转载于:https://www.cnblogs.com/absolute/p/5690313.html

边工作边刷题:70天一遍leetcode: day 51相关推荐

  1. 边工作边刷题:70天一遍leetcode: day 94-1

    Largest BST Subtree 要点: http://articles.leetcode.com/largest-binary-search-tree-bst-in 这题重点是理解题意,还有道 ...

  2. 边工作边刷题:70天一遍leetcode: day 11-2

    Gas Station 老题,这种circular的题一般都能转化成单向的.比如这题就是用sumDiff来判断是否有解,而start单向递增. class Solution(object):def c ...

  3. 边工作边刷题:70天一遍leetcode: day 92

    House Robber I/II/III 这题代表了单向线性dp的基本pattern: build local best value at each element and track the gl ...

  4. 边工作边刷题:70天一遍leetcode: day 98

    LRU Cache 这是一道leetcode的难题,这种题往往是算法结构很复杂,涉及一个或多个考点算法和数据结构的组合,同时又有很多corner cases要考虑.所以一定要找到合适memorize的 ...

  5. 边工作边刷题:70天一遍leetcode: day 97-2

    Design Hit Counter 要点:因为是second granularity,所以可以用以秒为单位的circular buffer方法.这题简单在只需要count过去300秒的,增加难度可以 ...

  6. 边工作边刷题:70天一遍leetcode: day 73

    Read N Characters Given Read4 I/II 要点:这题的要点就是搞清楚几个变量的内在逻辑:只有buffer是整4 bytes的.而client要读的bytes(需求)和实际上 ...

  7. 边工作边刷题:70天一遍leetcode: day 7

    Max Points on a Line 要点:这题暴力解是用任何两点确定一条直线,然后对其他点检查是否共线,显然,这里没用空间来存储之前的检查结果,所以time complexity是O(n^3). ...

  8. 边工作边刷题:70天一遍leetcode: day 67-1

    Rectangle Area 要点:基本思路就是先分开算再减去相交部分,这题的难点是如何检查是否相交和如何算出相交部分的面积. 2d转化为1d:x轴和y轴是orthogonal的.可以分开考虑.这样检 ...

  9. 边工作边刷题:70天一遍leetcode: day 6

    Compare Version Numbers 题本身思路简单没什么可说的.值得一提的是corner case:多出来的0和没有是相同版本,这样最简单的处理是直接对没有的补0.这样因为需要补齐,循环是 ...

最新文章

  1. R语言实战 - 基本统计分析(2)- 频数表和列联表
  2. 零样本风格迁移:多模态CLIP文本驱动图像生成
  3. 软件构建发布自动化[摘抄]
  4. 190空难_印度撤侨专机空难 官方检视黑盒子查失事原因
  5. C++一学就废?试试这个项目包
  6. 有趣的灵魂连墓碑都很酷! | 今日趣图
  7. easyui Combotree 怎么加载数据 支持多选
  8. [Android] SharedPreference的使用
  9. Windows Server 2012 DHCP故障转移
  10. duilib之源码分析
  11. 关于python提交spark以及在spark环境中使用本地包的方法--针对于集群无法在线下包以及python版本和spark绑定的问题解决
  12. paip.sql2008 客户端软件绿色版V319
  13. java多线程优秀开源项目_github比较热门的Java开源项目
  14. java并发编程 pdf_Java并发编程实战 PDF
  15. LCD3D打印机和DLP3D打印技术的区别详解
  16. 笔记本win7怎么重装系统步骤
  17. spring security实现注解式权限管理时不成功,注解@Secured 无效
  18. github使用指南(史上最全)
  19. 关于稠密性和连续性的通俗理解
  20. 1-9Ps.CS5实例视频195集

热门文章

  1. 系统安装无法找寻硬盘!!!【全系列】
  2. Python MySQL(MySQLdb)
  3. 用vue手脚架生成的项目直接修改时.vue文件后,保存编译就报一大堆的错,这是咋回事呢?
  4. 五种最常见的开源路由器第三方固件测评-转
  5. sqlite的交叉编译及移植 -转
  6. android 7.1 支持哪些 cpu,锤子新机坚果Pro配置放出:骁龙626处理器、Android 7.1.1系统...
  7. L1-061 新胖子公式 (10 分)-PAT 团体程序设计天梯赛 GPLT
  8. PAT 1082. 射击比赛 (20) - 乙级
  9. bind9局域网其他用户不能解析_linux dns server bind9 内网域名解析
  10. 五种 JSP页面跳转方法详解