字符串未知模式匹配

时间:2012-02-20 22:12:42

标签: string pattern-recognition

我想确定字符串中的未知模式,例如

S = 112468112468112468112468112468。

所以在这个字符串中,我们可以清楚地看到112468是重复模式。我搜索了 在google上找到一些算法来帮助我,但我只能看到一些在字符串中找到给定模式的文件,如Boyer-Moore算法等。

我现在要做的是找到这些重复的未知模式,

for(i=0;i<Length of String;i++)
{
  for(j=i+1;j<Length of String;j++)
  {
    if(s[i]==s[j] && s[i+1]==s[j+1] && s[i+2]==s[j+2] && s[i+3]==s[j+3])
    {
       patternlength=j-i;

           for(k=i;k<j;k++)
           {
            pattern[k]=s[i+k]
           }
     }
   }
}

虽然这可以通过使用4个文字的比较窗口来处理给定字符串,但它可能不适用于其他字符串。有没有人知道更好的解决方案。

由于

1 个答案:

答案 0 :(得分:1)

这不是模式匹配,这是模式识别,这是根本不同的,可能更难。

但是,可以使用(Python代码)找到此字符串显示的简单模式:

def find_repeated_pattern(s):
    for i in xrange(1, len(s) / 2):
        if s == s[:i] * (len(s) / i):
            return s[:i]

这是一个天真的实现,因为它的所有字符串复制,但它可以在O( n ²)时间和恒定空间中工作。