|
|
1
1
您的复杂性分析是错误的,因为
假设输入字符串不包含任何搜索词。然后,你将做长度为1,2,3,…的子串。。。,n、 并在每个上调用包含
获取实际
哪里
(此代码未经测试,您可能需要修复小错误,但总体思路应该是可靠的)
|
|
2
1
我相信它可以用O(N*max_word_length)(至少不存在对字数的多项式依赖性)TC求解,使用 trie 数据结构:
|
|
3
1
步骤1:将单词存储在前缀树(又名trie)中 我们可以将单词存储在前缀树(又名trie)中,如下所示:根节点最多指向26个节点,每个单词的第一个字母对应一个节点。然后,每个节点最多指向26个子代,每个字母对应一个子代,从根到当前节点可以跟随前缀。 示例:我们要存储CAT、CAN、COT、ART、ARE
把单词列表放在前缀树中。如果一个单词曾经是另一个单词的延伸(例如紧张与猫),则省略较长的单词。也就是说,在创建树时,如果一个单词的结尾是一个有后代的字母,请从树中删除所有后代。如果一个单词延伸过一片叶子,忽略它。 此步骤为O(禁止单词的字母计数之和) 第二步:在输入字符串中查找禁止单词的起始和结束索引 维护前缀树中字母的引用/指针的链接列表,最初为空。我将在下面调用这些指针。 首先,举个例子:假设输入字符串是CART,禁止使用的单词是CAN、CAT、COT、are、ART,如上所述。
请注意,每个指针都将始终指向当前字母。在每一步上,一个指针:
分析输入字符串。对于每个字母:
这个步骤是O((输入字符串的长度)*(指针的平均数量))。我不确定你一次可能有多少个活跃的指针。 第三步:找到最长的子字符串,它不包含任何被禁单词的起始和结束索引 完成后,在线性附加时间内,您可以使用它来查找不包含禁止字的最长子字符串。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |