你有一连串的字符串。在任何时候,你都必须打印字符串,以便将彼此排列的字符串打印在一起。
例如:
输入:{'act','cat',dog','tac','abc','god','bac'}
输出:{'act','cat','tac',dog','god','abc','bac'}
可以添加更多字词。
可以使用哪种算法或数据结构?
答案 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);
}
anagrams通过按字典顺序排列的最小字符串形成等价类,该字符串可以从所有字符的排列中获得。您还可以提出一系列其他等价类公式。
我想打印应该很明显。