注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
两个字符串的距离定义为除去共同前缀后两字符串长度只和。给一个二元字符串列表,请给出距离最大的两个字符串的距离。
这个暴力破解的话也不难,时间复杂度O(m*n^2), 其中m为字符串平均长度。
另一个解法是用Trie. 完整代码见下方。希望大家多多给点大米,非常感谢! 直接给代码毕竟太赤裸裸, 后面会尽量降hide的threshold的。
[hide=200]class TrieNode:
def __init__(self, depth):
# self.char = char
self.left = None
self.right = None
self.isEnd = False
self.depth = depth
def get(self, c):
if c == '1':
return self.right
else:
return self.left
def set(self, c):
if c == '1':
self.right = TrieNode(self.depth + 1)
else:
self.lefttest1(self):
words = ['1011000', '10111101', '1100000']
self.setup(words)
distance = self.trie.root.maxDistance()
print('max_distance between words ', words, distance)
test = Test()
test.test1()
补充内容 (2019-9-19 03:11):
使用Trie以后时间复杂度是O(mn), 把m看做常数的话,这就是线性时间的解 |