1. 解题思路
这一题其实暴力求解也问题不大,只要把一个数列当中所有数字所能构成的prefix全部记录下来,然后在另一个arr当中进行查找就行。
不过,这里一个更为优雅的实现是使用Trie树的方式,我们用一个数组来构造一个Trie树,然后遍历另一个数组,找到每一个数字在Trie树当中的最长公共前缀,然后进行返回即可。
两者本质上是完全一样的,不过后者思路和实现上更加优雅一些。
2. 代码实现
给出python代码实现如下:
class Trie:
def __init__(self):
self.trie = {}
def add_word(self, word):
trie = self.trie
for c in word:
trie = trie.setdefault(c, {})
trie["eos"] = word
return
def find_prefix(self, word):
trie = self.trie
length = 0
for c in word:
if c not in trie:
break
trie = trie[c]
length += 1
return length
class Solution:
def longestCommonPrefix(self, arr1: List[int], arr2: List[int]) -> int:
trie = Trie()
for x in arr1:
trie.add_word(str(x))
return max(trie.find_prefix(str(x)) for x in arr2)
提交代码评测得到:耗时818ms,占用内存36.6MB。