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_Sorting_Substring_Sliding Window - Fatal编程技术网

String 每个滑动窗口位置的词汇首个固定大小的子字符串

String 每个滑动窗口位置的词汇首个固定大小的子字符串,string,algorithm,sorting,substring,sliding-window,String,Algorithm,Sorting,Substring,Sliding Window,从给定的字符串中,我想找到某个固定大小的子字符串k,它在字符串中大小相同的所有子字符串中以词汇排序顺序排在第一位 我会在非常长的字符串大小m上使用滑动窗口来完成这项工作,并希望在我将其穿过字符串时,为每个滑动窗口大小n>k的位置找到子字符串 看起来这个简单的解决方案需要logn时间上的m* 我想如果我在开始时进行常规排序,然后删除从最后一个窗口位置开始的子字符串,并在每次移动窗口时将新的子字符串插入到已排序的子字符串集合中,就可以得到m*Ologn。当然,我不单独存储子字符串,只保留它们在集合中

从给定的字符串中,我想找到某个固定大小的子字符串k,它在字符串中大小相同的所有子字符串中以词汇排序顺序排在第一位

我会在非常长的字符串大小m上使用滑动窗口来完成这项工作,并希望在我将其穿过字符串时,为每个滑动窗口大小n>k的位置找到子字符串

看起来这个简单的解决方案需要logn时间上的m*

我想如果我在开始时进行常规排序,然后删除从最后一个窗口位置开始的子字符串,并在每次移动窗口时将新的子字符串插入到已排序的子字符串集合中,就可以得到m*Ologn。当然,我不单独存储子字符串,只保留它们在集合中的位置,所以空间需求只是n-k个整数


有更快的算法吗?

设m为输入字符串的大小,n为您要查找的字符串的长度。我认为你可以通过使用后缀树及时解决这个问题


首先为输入字符串构建后缀树。这需要时间。现在,在树上进行深度优先搜索,在每一步中始终按照字典顺序选择第一个选项。在这样做的过程中,您找到的长度为n的第一个字符串是按字典顺序排列的长度为n的第一个子字符串。对长度为m的字符串在后缀树上执行DFS需要时间Om,因此总体上这需要时间Om。

如果我理解正确,您希望找到具有较低/较高字典顺序的k长字符串。如果你有这个字符串Czabyrrcdaresfgac,k=3,你想得到aby,对吗?举几个例子有时会有帮助;对你说得对。带尺寸为n=10的滑动窗。aby将是答案,直到位置11,此时aby将变为are。