leetcode 318. Maximum Product of Word Lengths-最长单词积|位运算
2016-05-23 22:17
543 查看
原题链接:318. Maximum Product of Word Lengths
【思路-Java、Python】
本题的妙处在于用一个 int 值就能表示26个字母,哪些字母在单词中出现过,哪些字母没有在单词中出现过。我们知道一个 int 值有32位,小写字母总共有26位,32位的 int 值足够用每一位表示26位字母是否在单词中出现。假设字母 a 可以映射为第0位,b可以映射为第1位,...,z 可以映射为第25位,那么假设对于 int 为5的数字,在二进制中第0位和第2位为1,其他位都为0,这就代表字母 a 和 c 出现过:
cases passed. Runtime: 992
ms Your runtime beats 60.08% of pythonsubmissions.
上面的 Java 和 Python 的代码中我们还得注意一点小小的区别,①和②两行。在 Java 中,位运算的优先级低于判断运算符,而在 Python 中位运算的优先级却高于判断运算符。
【思路-Java、Python】
本题的妙处在于用一个 int 值就能表示26个字母,哪些字母在单词中出现过,哪些字母没有在单词中出现过。我们知道一个 int 值有32位,小写字母总共有26位,32位的 int 值足够用每一位表示26位字母是否在单词中出现。假设字母 a 可以映射为第0位,b可以映射为第1位,...,z 可以映射为第25位,那么假设对于 int 为5的数字,在二进制中第0位和第2位为1,其他位都为0,这就代表字母 a 和 c 出现过:
public class Solution { public int maxProduct(String[] words) { int len = words.length; int[] table = new int[len]; //table[i]用于存储 words[i] 中存现哪些小写字母 int maxLen = 0; //记录最大长度 for (int i = 0; i < len; i++) for (int j = 0; j < words[i].length(); j++) table[i] |= 1 << words[i].charAt(j) - 'a'; //将出现的字母映射到 int 相应的那一位,并将那一位置为1 for (int i = 0; i < len; i++) for (int j = i + 1; j < len; j++) if ((table[i] & table[j]) == 0) //① maxLen = Math.max(maxLen, words[i].length() * words[j].length()); return maxLen; } }
class Solution(object): def maxProduct(self, words): """ :type words: List[str] :rtype: int """ table = [] maxLen = 0 for i in range(len(words)) : table.append(reduce(lambda x,y : x|1<<(ord(y)-ord('a')),[ j for j in words[i]], 0)) for i in range(len(words)) : for j in range(i+1,len(words)) : if table[i] & table[j] == 0 and maxLen < len(words[i])*len(words[j]): //② maxLen = len(words[i])*len(words[j]) return maxLen174 / 174 test
cases passed. Runtime: 992
ms Your runtime beats 60.08% of pythonsubmissions.
上面的 Java 和 Python 的代码中我们还得注意一点小小的区别,①和②两行。在 Java 中,位运算的优先级低于判断运算符,而在 Python 中位运算的优先级却高于判断运算符。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 介绍一款信息管理系统的开源框架---jeecg
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- install and upgrade scrapy
- Scrapy的架构介绍