Ai
1 Star 2 Fork 5

LilithSangreal/LeetCode-Solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
maximum-product-of-word-lengths.py 1.94 KB
一键复制 编辑 原始数据 按行查看 历史
Allen Liu 提交于 2018-10-13 01:56 +08:00 . add complexity
# Time: O(n) ~ O(n^2)
# Space: O(n)
class Solution(object):
def maxProduct(self, words):
"""
:type words: List[str]
:rtype: int
"""
def counting_sort(words):
k = 1000 # k is max length of words in the dictionary
buckets = [[] for _ in xrange(k)]
for word in words:
buckets[len(word)].append(word)
res = []
for i in reversed(xrange(k)):
if buckets[i]:
res += buckets[i]
return res
words = counting_sort(words)
bits = [0] * len(words)
for i, word in enumerate(words):
for c in word:
bits[i] |= (1 << (ord(c) - ord('a')))
max_product = 0
for i in xrange(len(words) - 1):
if len(words[i]) ** 2 <= max_product:
break
for j in xrange(i + 1, len(words)):
if len(words[i]) * len(words[j]) <= max_product:
break
if not (bits[i] & bits[j]):
max_product = len(words[i]) * len(words[j])
return max_product
# Time: O(nlogn) ~ O(n^2)
# Space: O(n)
# Sorting + Pruning + Bit Manipulation
class Solution2(object):
def maxProduct(self, words):
"""
:type words: List[str]
:rtype: int
"""
words.sort(key=lambda x: len(x), reverse=True)
bits = [0] * len(words)
for i, word in enumerate(words):
for c in word:
bits[i] |= (1 << (ord(c) - ord('a')))
max_product = 0
for i in xrange(len(words) - 1):
if len(words[i]) ** 2 <= max_product:
break
for j in xrange(i + 1, len(words)):
if len(words[i]) * len(words[j]) <= max_product:
break
if not (bits[i] & bits[j]):
max_product = len(words[i]) * len(words[j])
return max_product
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/LilithSangreal/LeetCode-Solutions.git
git@gitee.com:LilithSangreal/LeetCode-Solutions.git
LilithSangreal
LeetCode-Solutions
LeetCode-Solutions
master

搜索帮助