有限状态或后缀树

时间:2014-05-24 12:15:41

标签: computer-science finite-automata suffix-tree

我想创建一种算法,在字母表中存在的字符串中查找子字符串。例如,在字符串“abcdefhhhasddasdabbba”中,我想找到由字母{'a','b'}

生成的子串

所以我的输出将是:ab,a,abbba

如果我使用有限状态,我必须创建包含我的输出的精确有限状态,所以我将不得不采取所有可能的组合来确定它的效率。

如果我使用后缀树,那么如何在树中找到可能不是前缀或后缀的子串?我是否应该为每个节点使用一个数组来保存子树的数据,然后检查数组是否包含字母中未包含的字符?

编辑:

复杂性很糟糕。

1 个答案:

答案 0 :(得分:2)

这可以通过简单的循环来完成,不需要数据结构。

for each letter in word
  if letter in alphabet, then add it to a current "X"
  otherwise emit current "X" and set "X" to empty string

python示例

word = 'aababadadadab'
alphabet = { 'a', 'b' }

X = ''
for letter in word + '$': 
  if letter in alphabet:
    X += letter
  else:
    print X
    X = ''

输出:

aababa
a
a
ab

我使用' $'作为字母表外部的特殊字符,用于简化代码