String 在多个字符串中查找子序列ocurrence
给定一个长度为String 在多个字符串中查找子序列ocurrence,string,algorithm,subsequence,String,Algorithm,Subsequence,给定一个长度为m的字符串,以及一组长度等于或大于m的其他字符串。查找集合中具有S作为子序列的字符串 因此,如果S为blr且字符串集为: bangalore booleer bamboo 它应该返回前两个字符串 我知道我可以找到长度为m的字符串S是否是长度为n的其他字符串T在时间复杂度O(n+m)上的子序列。因此,我知道我可以对集合中的每个元素执行此算法,但时间复杂度为O(k*(n+m)),即k集合的大小(假设所有字符串的长度相同)。这让我想知道是否有某种预处理可以帮助我解决多个字符串的问题 那
m
的字符串,以及一组长度等于或大于m
的其他字符串。查找集合中具有S
作为子序列的字符串
因此,如果S
为blr
且字符串集为:
bangalore
booleer
bamboo
它应该返回前两个字符串
我知道我可以找到长度为m
的字符串S
是否是长度为n
的其他字符串T
在时间复杂度O(n+m)上的子序列。因此,我知道我可以对集合中的每个元素执行此算法,但时间复杂度为O(k*(n+m)),即k
集合的大小(假设所有字符串的长度相同)。这让我想知道是否有某种预处理可以帮助我解决多个字符串的问题
那么,有没有任何预处理或结构可以用来解决这个问题?
我能达到的最佳时间复杂度是什么?
有没有其他方法可以解决这个问题?对于拖串ch和s如果您想确定ch是否在以s作为子序列的集合中,算法的复杂性为O(n)
public bool函数(字符串ch,字符串s)
{
如果(通道长度
之后,您必须将其应用于R中的所有字符串,用于拖字符串ch和s。如果您想确定ch是否在以s为子序列的集合中,则算法的复杂性为O(n)
public bool函数(字符串ch,字符串s)
{
如果(通道长度
在那之后,你必须将它应用于R中的所有字符串,我没有代码实现,但我确实找到了一篇1984年的论文,作者是许文杰和杜文伟
他们的结论是,通过执行O(L)预处理时间(其中L是集合中所有字符串的总长度),可以在O(p)中执行每个搜索,其中p是指针出现在干草堆中的次数。我没有代码实现,但我确实找到了一篇1984年的论文,许文杰、杜文伟著 他们的结论是,通过执行O(L)预处理时间(其中L是集合中所有字符串的总长度),可以在O(p)中执行每个搜索,其中p是指针出现在干草堆中的次数
public bool function(string ch, string s)
{
if (ch.Length < s.Length)
return false;
int j = 0;
for (int i = 0; i < ch.Length; i++)
{
if (ch[i] == s[j])
{
j++;
if (s.Length == j)
{
return true;
}
}
}
return false;
}