找到常见的子串

时间:2012-09-24 09:32:22

标签: php arrays substring

我有N个字符串。我希望找到至少2个字符长的所有子串,至少出现2个字符串。

对于以下字符串:

  1. 我的名字是daniel
  2. 你叫什么名字?
  3. 他们叫我daniel
  4. 它应该返回(不包括只有一个字符的字符串):

    • “name” - 1.& 2。
    • “是” - 1.& 2。
    • “daniel” - 1.& 3。
    • “我” - 1.& 3。
    • “y” - 1.& 3。

    字符串的长度可能很长(1KB-10KB)。我几乎没有内存问题(~2GB) - 我只需要尽快计算这些常见字符串。

    提前致谢! 丹尼尔。

2 个答案:

答案 0 :(得分:0)

我建议在数据库中制作3个表:

  1. 包含文字
  2. 中单个单词的索引表
  3. 包含文字
  4. 的表格
  5. 一个包含从单词到文本的引用的表
  6. 方法是这样的:

    1. 将字符串添加到文本表(2)
    2. 用文字分割字符串
    3. 对于每个单词:如果单词不在索引(1)表中,则添加它。
    4. 每个单词
    5. :在参考表(3)中添加一个条目,链接到单词和文本表
    6. 如果你有这种结构,你现在可以很容易地计算出词语,它们发生的频率以及它们发生的位置。

      如果在索引表上放置索引,则可以非常快速地搜索。

答案 1 :(得分:0)

我发现我最好的选择是在字符串之间进行所有可能的组合(大约n ^ 2种组合),然后在每种组合上运行LCS算法。现在我可以比较所有结果来处理它们。

每次运行LCS算法时,O(n ^ 2 * m ^ 2) - n ^ 2个O(m ^ 2)组合。

我知道这是天真的实现,但它是我能找到的最好的实现。

非常感谢: - )