talk is cheap, show me the code.實現乙個可儲存若干個單詞的字典。使用者可以
在字典中加入單詞;
查詢指定單詞在字典中的兄弟單詞個數;
查詢指定單詞的指定序號的兄弟單詞,指定序號指字典中兄弟單詞按字典順序排序後的序號(從1開始);
清空字典中所有單詞。
定義,格式說明
單詞:由小寫英文本母組成,不含其它字元。
兄弟單詞:給定乙個單詞x,如果通過任意交換單詞中字母的位置得到不同的單詞y,那麼定義y是x的兄弟單詞。
字典順序:兩個單詞(字母按照自左向右順序),先以第乙個字母作為排序的基準,如果第乙個字母相同,就用第二個字母為基準,如果第二個字母相同就以第三個字母為基準。以此類推,如果到某個字母不相同,字母順序在前的那個單詞順序在前。如果短單詞是長單詞從首字母開始連續的一部分,短單詞順序在前。
舉例:bca是abc的兄弟單詞;abc和abc是相同單詞,不是兄弟單詞。
規格:0 <= 字典中所含單詞個數 <= 1000
1 <= 單詞所含字母數 <= 50
測試用例保證:介面中輸入不會超出如上約束。
輸入描述:
先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸出描述:輸入乙個單詞,查詢其在字典中兄弟單詞的個數
再輸入數字n
根據輸入,輸出查詢到的兄弟單詞的個數輸入例子:
3
abcbca
cababc
1
輸出例子:
2
bca
問題的難點在於查詢兄弟單詞,如果考慮對於查詢單詞列舉出它所有可能得兄弟單詞,然後再去在輸入字典中查詢,那麼列舉所有可能兄弟單詞將會是乙個非常複雜的工作,複雜度是階乘的,所以這種思路不可行,那麼只能考慮對於輸入的乙個單詞逐個地與輸入字典中的單詞進行比較,判斷輸入字典中的單詞是否查詢單詞的兄弟單詞,可以對單詞進行排序,那麼如果是兄弟單詞,排序後的單詞應該是相等的。
#include #include #include #include #include using namespace std;
int main()
string query;
cin >> query;
string querystr = query;
sort(querystr.begin(), querystr.end());
string temp;
vectorres;
for (vector::iterator it = vect.begin(); it != vect.end(); ++it)
sort(res.begin(), res.end());
cout << res.size() << endl;
int index;
cin >> index;
if (index <= res.size())
cout << res[index - 1] << endl;
}return 0;
}
演算法題 兄弟單詞
在字典樹的字首中再儲存乙個vector結構的容器 struct word 首先根據字典中的單詞來建立字典樹,建立的時候,需要稍微特殊處理一下,就是比如pots stop和tops互為兄弟單詞,那麼在字典中按照首字母順序的話,應該先遇到pots單詞,那麼我首先對其進行排序,結果是opts,那麼字典樹中...
27 查詢兄弟單詞
輸入描述 先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出描述 根據輸入,輸出查詢到的兄弟單詞的個數 思路 將所有單詞加入wordlist,然後遍歷查詢 while true try string input strip split ...
華為OJ(查詢兄弟單詞)
描述 題目描述 知識點查詢 執行時間限制 10m記憶體限制 128輸入 先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出根據輸入,輸出查詢到的兄弟單詞的個數 輸出指定的第n個兄弟單詞 樣例輸入 3 abc bca cab abc 1 ...