String 流水中的字符串字谜

String 流水中的字符串字谜,string,algorithm,data-structures,String,Algorithm,Data Structures,你有一个连续的字符串流。在任何时候,您都必须打印字符串,以便将彼此排列的字符串打印在一起 例如: 输入:{'act','cat',dog','tac','abc','god','bac'} 输出:{'act','cat','tac',dog','god','abc','bac'} 可以添加更多单词 哪种算法或数据结构可以使用?< P>如果你喜欢C++,那么简单地把它们存储起来: unordered_map<string, vector<string> > anagrams

你有一个连续的字符串流。在任何时候,您都必须打印字符串,以便将彼此排列的字符串打印在一起

例如:

输入:{'act','cat',dog','tac','abc','god','bac'}

输出:{'act','cat','tac',dog','god','abc','bac'}

可以添加更多单词


哪种算法或数据结构可以使用?

< P>如果你喜欢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);
}
unordered_-map anagrams;
无效插入(常量字符串和字符串){
字符串拷贝=str;
排序(str.begin(),str.end());
字谜[str]。推回(复制);
}
字谜通过从所有字符的排列中获得的字典最小字符串形成等价类。您还可以提出一系列其他等价类公式


我想打印应该是显而易见的。

我完全不清楚何时需要输出特定的字符串。我们必须将给定的字符串基本上划分为组:例如cat、act和tac将在一个组中,因为这三个字符串都是彼此的排列,同样地,狗和上帝是字谜,所以他们将在另一组。更清楚。例如,“狗”和“上帝”也可以出现在开头吗?最后?按相反的顺序?请用所有这些问题的答案更新您的问题。到目前为止,您可以按任何顺序打印它们,在开始、结束或任何位置,但这是流动的流,可以添加更多的单词。不要使用“流”一词,因为它具有不适用于此处的特定含义。流算法总是在写入下一小段输出之前只读取下一小段输入。这种方法在这里不起作用,因为在看到所有输入单词之前,我们无法写出下一个单词。你能举个小例子吗