【问题标题】:String Unknown pattern Matching字符串未知模式匹配
【发布时间】:2012-02-21 06:29:16
【问题描述】:

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

s=112468112468112468112468112468。

所以在这个字符串中,我们可以清楚地看到 112468 是重复模式。我搜索过 在谷歌上找到一些算法来帮助我,但我只能看到在字符串中找到给定模式的算法,例如 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 个文字的比较窗口适用于给定的字符串,但它很可能不适用于其他字符串。有没有人知道更好的解决方案。

谢谢

【问题讨论】:

  • 让机器识别文本中的任何模式都不是小问题。例如,您是否对具有重复模式的字符串感兴趣?如果您能给我们提供您有兴趣搜索的类型或模式,我们或许可以提供更多帮助。
  • 嗯,我正在处理的那种模式将是具有重复模式的字符串,并且与我上面写的“s”非常相似。我上面编码的方法对我来说很好。但我只是想知道是否有一些标准算法可以做到这一点。

标签: string pattern-recognition


【解决方案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²) 时间和恒定空间内工作。

【讨论】:

  • 嗨。感谢您的回复。实际上,我应该在其中找到模式的字符串也是动态生成的。我不是 python 专家,但这段代码 sn-p 是否适用于任何类型的字符串,它是否特定于我编写的代码。
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 2018-10-04
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多