根據一個單詞找全部的兄弟單詞的思想如何處理

問題:給定一個單詞a,若是經過交換單詞中字母的順序能夠獲得另外的單詞b,那麼定義b是a的兄弟單詞,例如單詞abbsd和dabbs互爲兄弟單詞。如今給定一個字典,用戶輸入一個單詞,如何根據字典找出這個單詞有哪些兄弟單詞?要求時間和空間效率儘量的高。排序

解法一:hash

使用hash_map和鏈表。 效率

首先定義一個key,使得兄弟單詞有相同的key,不是兄弟的單詞有不一樣的key。例如,將單詞按字母從小到大從新排序後做爲其key,好比bad的key爲abd,good的key爲dgoo。 遍歷

使用鏈表將全部兄弟單詞串在一塊兒,hash_map的key爲單詞的key,value爲鏈表的起始地址。 map

開始時,先遍歷字典,將每一個單詞都按照key加入到對應的鏈表當中。當須要找兄弟單詞時,只需求取這個單詞的key,而後到hash_map中找到對應的鏈表便可。 鏈表

這樣建立hash_map時時間複雜度爲O(n),查找兄弟單詞時時間複雜度是O(1)。時間

 

解法二:字典

一樣使用hash_map和鏈表。ab

將每個字母對應一個質數,而後讓對應的質數相乘,將獲得的值進行hash,這樣兄弟單詞的值就是同樣的了,而且不一樣單詞的質數相乘積確定不一樣。

使用鏈表將全部兄弟單詞串在一塊兒,hash_map的key爲單詞的質數相乘積,value爲鏈表的起始地址。

對於用戶輸入的單詞進行計算,而後查找hash,將鏈表遍歷輸出就獲得全部兄弟單詞。

這樣建立hash_map時時間複雜度爲O(n),查找兄弟單詞時時間複雜度是O(1)。

相關文章
相關標籤/搜索