Leetcode 3043. Find the Length of the Longest Common Prefix

本文介绍了LeetCode题目3043的解决方案,通过构建Trie树高效地找出两个整数数组中每个元素的最长公共前缀。作者提供了Python代码实现,展示了优雅的数据结构处理方式,代码运行时间为818ms,内存占用36.6MB。
摘要由CSDN通过智能技术生成

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值