Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 寻找最短子段_String_Algorithm - Fatal编程技术网

String 寻找最短子段

String 寻找最短子段,string,algorithm,String,Algorithm,我想知道我应该申请哪一个alogrithm 它们是一个给定的句子和一个单词列表。我们必须找到包含单词列表中所有单词的第一个最短子段 例如: 这是我解决过的最好的问题 词表- 是 最好的 这个 答案应该是: 这是最好的 如果有许多这样的子段,那么我们必须打印一个包含最少字数的子段,并出现在句子的第一位。考虑以下简单方法- 为句子中的每个单词建立字典映射(枚举)。像- 这[1]是[2]我[6]解决过的[3]最好的[4]问题[5] 假设句子中的所有单词都是不同的 现在,一次只取一个单词,并记录该单词的

我想知道我应该申请哪一个alogrithm

它们是一个给定的句子和一个单词列表。我们必须找到包含单词列表中所有单词的第一个最短子段

例如:

这是我解决过的最好的问题

词表-

最好的

这个

答案应该是:

这是最好的


如果有许多这样的子段,那么我们必须打印一个包含最少字数的子段,并出现在句子的第一位。

考虑以下简单方法-

为句子中的每个单词建立字典映射(枚举)。像-

这[1]是[2]我[6]解决过的[3]最好的[4]问题[5]

假设句子中的所有单词都是不同的

现在,一次只取一个单词,并记录该单词的最大值和最小值作为关键字。在这种情况下,分别为4和1。
在限制内返回字符串。

以下是我解决上述问题的方法。 1。取两个指针,头和尾都指向0 现在移动头部指针,直到头部指针指向的单词是有效的关键字;现在把它标记为头。 2。现在移动尾部指针,直到句子至少包含一次所有给定的关键字;现在把它标记为尾巴。 这是第一个包含所有有效关键字的有效子段,并计算其长度 3。现在检查头部的单词频率-如果它大于1,现在将头部指针移动到句子中有效关键字的单词,并且它包含单词频率为1。 4。现在检查是否所有关键字都存在-如果是,计算其长度并将其存储为最小子段。 5。如果它不包含所有有效关键字,现在移动尾部指针,直到找到所有关键字,并计算其长度,如(尾部+1);如果大于最小值1,则忽略它。 6。现在继续这个过程,直到给定句子的最后一个关键字 上述方法的复杂性为o(n)

例如,让我们以这句话为例
您好,这是一个有趣的世界这是一个很好的世界体验
我需要找到3个关键词

this
is
world

首先考虑需要的2个哈希表,得到 现在将所有必需的关键字存储在必需的表中。 现在将head和tail设为0,现在检查hi是否为有效关键字,因为它不会移动head 现在检查下一个关键字,也就是这个,现在这是一个有效的关键字,所以计算1并将这个单词的位置存储为head。所以现在head是1 现在移动尾部指针,使下一个关键字为“is”,它是一个有效的关键字,因此递增计数 现在同样检查一个有趣的关键字,因为它们是无效的,所以将尾部移到世界 现在world是有效的,count是3,tail是4,只要count==所需关键字的数量(在我们的例子中是3),这意味着我们的段包含所有有效关键字 现在它的长度是(4-1+1)=4 现在检查头部单词的频率,它是一,所以若我们移动这个头部指针,那个么我们将不会得到一个有效的段 所以现在把尾部指针移到下一个单词,现在更新频率从1变为2,计数器变为4 现在我们可以移动我们的头指针,现在移动到一个关键字,现在更新计数器为3,因为我们的段现在不包含这个,因为我们已经从这个关键字移动了头指针 现在计数又是3,所以计算它的长度又是4 因此,检查头部关键字的频率是否为1,因此将尾部指针移动到下一个关键字,现在是关键字频率大于1,因此现在移动头部指针,直到我们得到一个有效的关键字,频率为1,现在获得的关键字为世界,头部位置为5,尾部位置为7 计数器是3,所以计算长度为7-5+1,也就是3,这是我们到目前为止发现的最小长度 现在移动尾部,直到头部的关键字freq大于1,现在我们的尾部最终变为13 现在将头部从5移动到6,计算它的长度,它变成13-6+1,也就是8,所以忽略它 现在,我们不能再移动我们的尾巴,因此打印单词从min_头到min_尾作为最终结果 在我们的例子中,答案是


世界这是

如果单词在句子中不清晰?一定是一个很流行的家庭作业问题或类似的问题。也可能是重复的