你能动态搜索c#中字符串中的序列吗?

时间:2013-04-23 18:08:41

标签: c# algorithm compression

第一次在这里问一个问题;

我正在寻找一种方法,可以使用搜索算法或内置方法动态搜索字符串或其他变量中的重复序列。

我说动态的原因是因为我希望它能够搜索字符串并找到自己的重复序列。我无法提供序列的构造函数来查找。

我不确定这是否可能,但如果是的话,所有的帮助将不胜感激!

这是我正在寻找的基本视觉表示(请注意,这不是代码,只是一个字符串的例子)


这将是一个长字符串,其中 序列 。这可能是并排匹配的字符,也可能不是,但不管怎样,这将是一个长字符串。如果这将是一个长字符串,我需要它自己找到这些 序列


正如您在上面的示例中所看到的,整个单个字符串中有两组匹配序列。如果有任何方式以编程方式识别这些,并且能够非常快速地搜索这些不同的模式,它将显着帮助我!

匹配很可能存储在List /数组中以供以后使用。

感谢您提供的任何帮助!


修改: 在提出这个问题时,案例敏感性不会成为问题。

当我提到有2个匹配时,我的意思是2个特定的序列,有重复。其中一个,有两个重复。

@HenkHolterman你是正确的,这将是一个压缩算法,但是,我不知道从哪里开始寻找我将匹配的序列。

我一直在做类似的事情的多次搜索,但是我想要的答案很短。这就是为什么我的问题在这里提出的原因。

感谢您到目前为止所做的所有回复!

2 个答案:

答案 0 :(得分:1)

这是基本的暴力理念

  • 首先找到大小为1的所有重复序列(您可以将最小大小更改为您想要的任何大小)。

要做到这一点,你基本上走下去,用正则表达式查找所有T,然后找到所有h等等......

  • 然后您会找到所有大小为2的序列,因此您可以找到所有Thhi以及is s

  • 你重复这个,直到找到所有的序列。

运行时将是

  • 使用正则表达式查找特定序列的时间复杂度: O(n)
  • 乘以特定大小的不同序列的数量: O(n)
  • 乘以尺寸数量: O(n)

总时间复杂度 O(n 3

答案 1 :(得分:0)

在O(n)时间内使用suffix tree执行此操作。我正在添加这个多余的句子,以防止它被转换为评论。