用随机字符串计算英文单词

时间:2010-09-08 03:04:53

标签: c# algorithm data-structures

假设我有一个随机生成的字符串s=t&^%JHGgfdteam*&HGEdfg,那么计算该字符串中英文单词数量的最佳方法是什么? (英语单词在某些词典文件中定义)。显然蛮力不是一个好主意......后缀是否会起作用?二进制搜索?请注意,在s的情况下,有两个词:“茶”和“团队”。 有任何想法吗? 此致

2 个答案:

答案 0 :(得分:9)

我会在Trie结构中加载字典单词,然后从左到右读取字符串并检查子字符串是否在trie中。如果他们是,并且有孩子,继续前进。如果它们恰好是叶子或有效单词,请添加到出现次数。

在伪代码中:

Trie dict = ... // load dictionary
Dictionary occurences = {}

for i in length(string):
    j = i + 1
    # think of partial as string.Substring(i, j);
    while dict.hasChildren(partial):
        j++ 
        if isWord(partial):
            dict[partial]++

通过这种方式,您可以保证在寻找所有可能性的同时不会遗漏比赛。

您可以通过更改j初始化的内容或通过拒绝isWord()方法中的短字来限制有效字词的最小长度(因此a不会是“有效的“字”。

答案 1 :(得分:6)

Aho-Corasick string matching algorithm以字典大小的时间线性构建匹配结构,并按时间线性匹配输入文本大小+匹配数量的模式。