Iam正在寻找一种算法,在'n'个总字符串数中找到至少'k'个字符串中的一组公共子串。
例如,如果我有5个字符串,那么n = 5 我想找到所有3个或更多字符串中常见的子串,然后k = 3.
输出应该是一组任意长度的子串,这些子串在至少3个字符串中很常见。
所以
应该给出类似的东西 ABC, AB, 公元前, b, C, 一个, X
搜索互联网的问题是我不知道这个问题的确切关键词。基本搜索会产生最长公共子字符串,这可能与我正在寻找的相关但不完全相同。
我的问题,已知的问题已经在文献中发表了既定的解决方案?指向正确关键字或引用文章的任何指针?
或者我必须将其指定为我自己的问题并为其创建算法?我脑海中最基本的想法是
结果将包含至少k个字符串中常见的所有公共子字符串。我认为这会有效,但如果有一些聪明的方法做同样的事情,那么我想使用和引用它。
特别是我不是在任何特定于语言的实现之后。我只是在寻找算法,或者在文献中找到这样的问题及其解决方案。
答案 0 :(得分:0)
你可以这样做:
创建从字符串到出现次数的地图(让我们称之为cnt
)。
对于每个给定的字符串,请执行以下操作:
创建一组所有子字符串S
。
对于S
中的每个字符串,在cnt
中为该字符串的出现次数添加一个。
从cnt
地图中选择所有具有出现次数> = k
的条目。
一些伪代码:
cnt = an empty map
for string <- strings
for substr <- set of substrings of the string
cnt[substr]++
for entry <- cnt
if entry.value >= k
print entry.key