分類: algorithm
一: ///
struct hash_node
;hash_mapdictmap;
int cmp( const void *a, const void *b)
int findbro(const string strdic)
plast = p;
p = p->pnext;
}if( p == plast)
else if(p == null)
return 0;
} ///
問題:給定乙個單詞a,如果通過交換單詞中字母的順序可以得到另外的單詞b,那麼定義b是a的兄弟單詞,例如單詞army和mary互為兄弟單詞。現在給定乙個字典,使用者輸入乙個單詞,如何根據字典找出這個單詞有哪些兄弟單詞?要求時間和空間效率盡可能的高。
解法一:
使用hash_map和鍊錶。
首先定義乙個key,使得兄弟單詞有相同的key,不是兄弟的單詞有不同的key。例如,將單詞按字母從小到大重新排序後作為其key,比如bad的key為abd,good的key為dgoo。
使用鍊錶將所有兄弟單詞串在一起,hash_map的key為單詞的key,value為鍊錶的起始位址。
開始時,先遍歷字典,將每個單詞都按照key加入到對應的鍊錶當中。當需要找兄弟單詞時,只需求取這個單詞的key,然後到hash_map中找到對應的鍊錶即可。
這樣建立hash_map時時間複雜度為o(n),查詢兄弟單詞時時間複雜度是o(1)。
解法二:
同樣使用hash_map和鍊錶。
將每乙個字母對應乙個質數,然後讓對應的質數相乘,將得到的值進行hash,這樣兄弟單詞的值就是一樣的了,並且不同單詞的質數相乘積肯定不同。
使用鍊錶將所有兄弟單詞串在一起,hash_map的key為單詞的質數相乘積,value為鍊錶的起始位址。
對於使用者輸入的單詞進行計算,然後查詢hash,將鍊錶遍歷輸出就得到所有兄弟單詞。
這樣建立hash_map時時間複雜度為o(n),查詢兄弟單詞時時間複雜度是o(1)。
27 查詢兄弟單詞
輸入描述 先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出描述 根據輸入,輸出查詢到的兄弟單詞的個數 思路 將所有單詞加入wordlist,然後遍歷查詢 while true try string input strip split ...
華為OJ(查詢兄弟單詞)
描述 題目描述 知識點查詢 執行時間限制 10m記憶體限制 128輸入 先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出根據輸入,輸出查詢到的兄弟單詞的個數 輸出指定的第n個兄弟單詞 樣例輸入 3 abc bca cab abc 1 ...
華為OJ 查詢兄弟單詞
查詢兄弟單詞 輸入描述 先輸入字典中單詞的個數,再輸入n 個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出描述 根據輸入,輸出查詢到的兄弟單詞的個數 輸入例子 3 abc bca cab abc 1 輸出例子 2 bca 解答 方法一 include include...