我正在寻找一种字符串处理算法,我已经搜索过但找不到符合我要求的算法。我将解释算法应该用一个例子做什么。
定义了两组字集,如下所示:
**Main_Words**: swimming, driving, playing
**Words_in_front**: I am, I enjoy, I love, I am going to go
一旦找到 Main_Words 中定义的单词,程序将搜索大量单词,它会检查该单词前面的单词,看是否有任何匹配的单词定义在 Words_in_front 。
即如果节目遇到“游泳”这个词,它必须检查“游泳”这个词前面的词是否是其中之一:我是,我喜欢,我喜欢,我会去。
是否有任何算法可以做到这一点?
答案 0 :(得分:1)
使用 Main_Words 中的键和 Words_in_front 中的键创建地图/词典/哈希/关联数组(使用您的语言定义的任何内容)是附加到条目的链接列表靠钥匙。每当您遇到与某个键匹配的单词时,请转到该表,查看附件列表中是否有与您前面的单词匹配的单词。
这是基本的想法,它可以针对速度和空间进行优化。
答案 1 :(得分:1)
您应该能够沿着这些方向构建regular expression:
I (am|enjoy|love|am going to go) (swimming|driving|playing)
答案 2 :(得分:1)
直接的方法是在文本中进行线性扫描,始终跟踪您看到的最后N + 1个单词(或字符),其中N是单词(或字符)的数量您words_in_front
集合中包含的最长短语。如果你有一个“主要单词”,你可以检查它之前的N个单词/字符的序列是否以你拥有的任何前缀结尾。
如果您将words_in_front
集转换为更好的数据结构,例如散列映射(可能由短语中的 last 字母键入...)或者某种前缀/后缀树,因此每次有匹配的“主词”时,不必对前缀集中的每个成员执行.endsWith
。正如另一个答案所述,优化和其他一些可能的实现还有很大的空间,但还有一个开始。