2016-02-23 45 views
-1

您有連續的字符串流。在任何時間點,您必須打印字符串,以便將相互排列的字符串打印在一起。運行流中的字符串字典

例如:

輸入:{ '動作', '貓',狗 ' 'TAC', 'ABC', '神', 'BAC'}

輸出:{' 動作','貓','tac',狗','神','abc','bac'}

更多詞語可以添加。

可以使用哪種算法或數據結構?

+1

當我需要輸出一個特定的字符串時,我完全不清楚。 –

+0

我們必須將給定的字符串分爲幾組:基本上,例如cat,act和tac將在一個組中,因爲所有這三個字符串都是相互排列的,同樣的,dog和god也是anagrams,所以它們將在另一個組中。 – geeky

+0

更清晰。也可以例如'狗'和'神'出現在一開始?最後?相反的順序?請更新您的問題,並回答所有這些問題。 –

回答

2

如果你喜歡C++,然後簡單地將它們存儲這樣的:

unordered_map<string, vector<string> > anagrams; 
void insert(const string& str) { 
    string copy = str; 
    sort(str.begin(), str.end()); 
    anagrams[str].push_back(copy); 
} 

字謎通過可以從所有的字符置換獲得字典序最小的串形成等價類。你也可以想出一堆其他等價類的公式。

我猜印刷應該很明顯。

+0

:你能舉個小例子 – geeky

+0

的例子是什麼? – iggy