是否有算法搜索数组中的单词

时间:2015-02-22 15:29:31

标签: arrays algorithm

例如,当给出一个有序单词列表,如字典和a 一维字母数组如:

 A | C | A | T | T | L | E | A | D |
---+---+---+---+---+---+---+---+----
 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

我希望输出结果为:

Index 0, A
Index 1, CAT
Index 1, CATTLE
Index 2, A
Index 5, LEAD
Index 7, A

索引是找到第一个字母的数组的索引,也可以找到单词,例如字母'a'。我正在考虑单词列表中的单词然后检查检查单词中的第一个字母和输入数组,然后检查下一个字母,看看它是否相同,直到世界达到,但我觉得这是低效的,并希望更清晰的方法。

2 个答案:

答案 0 :(得分:0)

以下python代码说明了我认为的解决方案:

import re

words=['A','CAT','CATTLE','AT','LEAD']
exp=words[0]
for i in range(1,len(words)):
    exp=exp+'|'+words[i] 

p = re.compile(exp)
s = 'ACATTLEAD'
p.findall(s)

不幸的是,输出是:

['A', 'CAT', 'LEAD']

CATTLE失踪了。我四处搜索,似乎任何构造匹配所有可能单词的NFA都会以n * m复杂度运行,其中n是我们匹配的文本的长度,m是我们要搜索的单词的数量。坦率地说,我不知道如何在Python中实现它。

答案 1 :(得分:-1)

对于完全匹配,通常会有,但通常会将单词列表转换为有限自动机,确定性与否。使用自然语言,数字,案例,时态,前缀和词缀,复合词,......确实会变得更有趣。