一篇文章,切完詞之後放到乙個vector中,乙個查詢切完詞也放到乙個vector中,寫乙個函式找出這篇文章中包含這個查詢中所有詞的最小區間的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,更新最小距離,繼續這個過程,直到有乙個索引為空為止,最終可以得到最小距離的索引。
廢話少說,直接上碼:
#include
#include
#include
#include
using namespace std;
bool find_shortest_distance(const vector &doc, const vector &query, int &i, int &j)
} if (q.empty())
index.push_back(q);
} // 求解的過程
int min, max;
int dis = doc.size() + 1;
while (true)
else if (front > max)
}int diff = max - min;
if (diff < dis)
minit->pop();
if (minit->empty())
}return true;
}int main()
**不盡完善,歡迎指正。 面試題 HashMap詳解
先上hashcode和equals原始碼 jni,呼叫底層其它語言實現 public native inthashcode 預設同 直接比較物件 public boolean equals object obj equals方法 string類中重寫了equals方法,比較的是字串值,看一下原始碼實...
MRO super面試題 詳解
class init object def init self,v print init self.val v class add2 init def init self,val print add2 super add2,self init val print self.val self.val ...
面試題17 17 多次搜尋
給定乙個較長字串big和乙個包含較短字串的陣列smalls,設計乙個方法,根據smalls中的每乙個較短字串,對big進行搜尋。輸出smalls中的字串在big裡出現的所有位置positions,其中positions i 為smalls i 出現的所有位置 輸入 big mississippi s...