我的一位朋友在最近的采访中遇到了这个问题。我在这里发布了2个问题以获得更好的解决方案&仅供参考。
- 如果你输入“light”,下拉列表中的建议大多以“light”开头,当你输入并更改每个字符时,它就会出现,但是如果你输入“tigress”或“possi”,建议包括“离题”或其他几个(同样的声音?)。如何实现这一建议功能?
- 存储和检索同义词,反义词,类型,类型等的最佳方法是查看这些标签。
我不认为这可以通过简单的字典类算法来解决(如果我错了,请纠正我)。 尽管他没有被要求编写任何示例代码,但对我来说这听起来很难。
答案 0 :(得分:4)
第一个问题:
我会使用基于公共前缀属性的Trie数据结构并构建它以产生光 - >光。我的猜测是,当我们不得不绕着母老虎走的时候 - >离题,使用通用后缀属性构建Trie。也就是说,不是从左到右逐个字符地构建trie,而是从右到左构建它。
因此, 母老鼠将被解析为:s-> s-> e-> r-> g-> i-> t AND 将解析为:s-> s-> e-> r-> g-> i-> d
我认为这在一开始就适用于建议。但是,我想了解我们如何在开始和结束时支持suggesting next character
。
答案 1 :(得分:2)
回答你的第一个问题。
edit distance衡量两个词的“不同”程度。通过将条目与单词主词列表(词典)进行比较,然后提供具有最低分数的前N个单词作为建议,可以直接实现。
答案 2 :(得分:0)
我可能会使用有向非循环字图来存储单词(以便根据前缀轻松制作建议),但是对于单词标记的结尾而不是简单的NULL我会有一个包含soundex的终端节点这个词的价值。
同义词,反义词和soundex匹配将位于一组独立的唯一数据结构中。关联数组就足够了,虽然只是一个紧凑数据数组中的键/索引的排序列表可能对小字集很好。