Leetcode 第 354 场周赛 Problem D 最长合法子字符串的长度(Trie + 枚举最远距离)
发布人:shili8
发布时间:2024-12-27 06:46
阅读次数:0
**Problem D: 最长合法子字符串的长度**
在 LeetCode 的第354 场周赛中,问题 D 需要我们求出给定一个 Trie(前缀树)中的最长合法子字符串的长度。这个问题涉及到 Trie 的构建和枚举最远距离的思想。
**Trie 的定义**
Trie 是一种用于存储和检索字符串集合的数据结构。它是一棵多叉树,每个结点代表一个字符,根结点代表空字符串。每个结点都有一个指向子结点的链表,表示该结点可以接续的字符。
**问题描述**
给定一个 Trie,其中每个结点都有一个值(0 或1),我们需要找到最长合法子字符串的长度。一个子字符串是合法的,如果它从根结点开始,并且所有结点的值都是1。
**解决方案**
我们的解决方案涉及到两步:
1. 构建 Trie 并计算每个结点的最大深度(即最远距离)。
2. 使用 Trie 的结构枚举最长合法子字符串并计算其长度。
### 步骤1:构建 Trie 和计算最大深度我们首先需要构建 Trie,并为每个结点计算其最大深度。这个过程可以使用一个 Trie 结点类来实现,例如:
class TrieNode: def __init__(self): self.children = {} self.max_depth =0
然后,我们可以使用一个函数来构建 Trie 和计算最大深度:
def build_trie(words): root = TrieNode() for word in words: node = root for char in word: if char not in node.children: node.children[char] = TrieNode() node = node.children[char] node.max_depth = max(node.max_depth,1 + node.max_depth) return root
### 步骤2:枚举最长合法子字符串和计算长度现在,我们需要使用 Trie 的结构枚举最长合法子字符串并计算其长度。这个过程可以使用一个函数来实现,例如:
def longest_valid_substring(root): max_length =0 for node in root.children.values(): if node.max_depth ==1: length =1 + longest_valid_substring(node) max_length = max(max_length, length) return max_length
### 完整代码完整的代码如下:
class TrieNode: def __init__(self): self.children = {} self.max_depth =0def build_trie(words): root = TrieNode() for word in words: node = root for char in word: if char not in node.children: node.children[char] = TrieNode() node = node.children[char] node.max_depth = max(node.max_depth,1 + node.max_depth) return rootdef longest_valid_substring(root): max_length =0 for node in root.children.values(): if node.max_depth ==1: length =1 + longest_valid_substring(node) max_length = max(max_length, length) return max_length# 测试用例words = ["abc", "bcd", "cde"] trie_root = build_trie(words) print(longest_valid_substring(trie_root))
这个代码首先构建 Trie,然后使用 Trie 的结构枚举最长合法子字符串并计算其长度。测试用例中,我们提供了一个包含三个单词的列表,分别是 "abc"、"bcd" 和 "cde"。然后,我们使用 `build_trie` 函数构建 Trie,并使用 `longest_valid_substring` 函数枚举最长合法子字符串并计算其长度。
**注意**
这个代码仅供参考,请自行测试和调试以确保其正确性。