人民搜索2
1、求包含所有query的最短距离
一篇文章,切完词之后放到一个vector<string>中,一个查询切完词也放到一个vector<string>中,写一个函数找出这篇文章中包含这个查询中所有词的最小区间的i和j。只要返回第一个即可。
当时很坑爹,直觉告诉我要建索引,而且建索引也对了,但是建完之后就不知道怎么搞了,后台他提示一句,有些是不需要比较的,才得到灵感,想出了解决办法,但是写起代码来,又掉链子了,可能是在纸上写代码没有什么经验吧,在电脑上,我写代码还是很快了。
言归正传,建索引的思路是对的。怎么建索引呢?
对于每个query中出现的词,建立索引,当然在实际应用中,可能是对文档中出现的所有词进行建索引。所谓建索引,就是记录query中每个词在doc中出现的位置。
比如一篇文档为“a b a a c d e f a f”,query为“a e f”,那么我们建立索引为:
a: 0 2 3 8
e: 6
f:7 9
那么下边如何搞呢?
首先看索引的第一排,0 6 7,找出最大和最小为7和0,距离为7,那么0 6 9还有没有必要比较呢?答案是否定的,那当然也就有思路了,比较了0 6
7之后,0就可以删除了,下面比较2 6
7,最小为2,最大为7,距离为5,更新最小距离,继续这个过程,直到有一个索引为空为止,最终可以得到最小距离的索引。
转自:http://www.cnblogs.com/cswolf/archive/2011/11/21/2267118.html
微信公众号:
猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。