【发布时间】:2014-08-01 05:57:46
【问题描述】:
我有两个名为 arraypi 和 arraye 的字符数组,其中包含我从文件中读取的数字。每个都有1,000,000 个字符。我需要从arraye(本例中为7)的第一个字符开始,在arraypi 中搜索。如果7 存在于arraypi 中,那么我必须搜索arraye 的下一个子字符串(在本例中为71)。然后搜索718、7182等,直到arraypi中不存在子字符串。然后我必须简单地将最大子字符串的长度放在一个整数变量中并打印出来。
值得一提的是,arraypi 每 50 个字符包含一个换行符,而 arraye 每 80 个字符包含一个换行符,尽管我认为这不会有问题吗?
我尝试过想办法实现这一点,但到目前为止我还没有想到什么。
【问题讨论】:
-
对于快速(子)字符串匹配应该使用en.wikipedia.org/wiki/…
-
@petrbel 实际上是knuth-morris-pratt 在这种情况下。由于输入字符串只有一个
-
@IvayloStrandjev 好吧,根据“......然后搜索 718、7182 等等......”,我发现更多的子字符串即将匹配,但更多的方法是可能的 - 如果你期望输入匹配最好使用AH并验证。另一方面,如果您期望子字符串的短序列,KMP 会快得多。
-
@petrbel 这些似乎是不同长度的初始输入的前缀。序列的长度在这里并不重要。重要的是您只为单个字符串构建自动机。我并不是说使用 aho-corasick 是错误的。这简直是矫枉过正
-
@IvayloStrandjev 是的,如果只匹配前缀,AH 确实是矫枉过正。
标签: c arrays string substring pi