# Given a sequence of words, print all anagrams together using STL

• Difficulty Level : Medium
• Last Updated : 10 Jun, 2021

Given an array of words, print all anagrams together.

For example,

Become a success story instead of just reading about them. Prepare for coding interviews at Amazon and other top product-based companies with our Amazon Test Series. Includes topic-wise practice questions on all important DSA topics along with 10 practice contests of 2 hours each. Designed by industry experts that will surely help you practice and sharpen your programming skills. Wait no more, start your preparation today!

```Input: array = {“cat”, “dog”, “tac”, “god”, “act”}
output: cat tac act, dog god
Explanation: cat tac and act are anagrams
and dog and god are anagrams as
they have the same set of characters.

Input: array = {“abc”, “def”, “ghi”}
output: abc, def, ghi
Explanation: There are no anagrams in the array.```

Other approaches are discussed herein these posts:

Approach: This is a HashMap solution using C++ Standard Template Library which stores the Key-Value Pair. In the hashmap, the key will be the sorted set of characters and value will be the output string. Two anagrams will be similar when their characters are sorted. Now,

1. Store the vector elements in HashMap with key as the sorted string.
2. If the key is same, then add the string to the value of HashMap(string vector).
3. Traverse the HashMap and print the anagram strings.

## C++

 `// C++ program for finding all anagram``// pairs in the given array``#include ``#include ``#include ``#include ``using` `namespace` `std;` `// Utility function for``// printing anagram list``void` `printAnagram(unordered_map >& store)``{``    ``for` `(``auto` `it:store)``    ``{``        ``vector temp_vec(it.second);``        ``int` `size = temp_vec.size();``      ` `        ``for` `(``int` `i = 0; i < size; i++)``        ``cout << temp_vec[i] << ``" "``;``          ` `        ``cout << ``"\n"``;``    ``}``}` `// Utility function for storing``// the vector of strings into HashMap``void` `storeInMap(vector& vec)``{``    ``unordered_map > store;``  ` `    ``for` `(``int` `i = 0; i < vec.size(); i++)``    ``{``        ``string tempString(vec[i]);``      ` `          ``// sort the string``        ``sort(tempString.begin(),tempString.end());``      ` `          ``// make hash of a sorted string``        ``store[tempString].push_back(vec[i]);``    ``}` `    ``// print utility function for printing``    ``// all the anagrams``    ``printAnagram(store);``}` `// Driver code``int` `main()``{``    ``// initialize vector of strings``    ``vector arr;``    ``arr.push_back(``"geeksquiz"``);``    ``arr.push_back(``"geeksforgeeks"``);``    ``arr.push_back(``"abcd"``);``    ``arr.push_back(``"forgeeksgeeks"``);``    ``arr.push_back(``"zuiqkeegs"``);``    ``arr.push_back(``"cat"``);``    ``arr.push_back(``"act"``);``    ``arr.push_back(``"tca"``);` `    ``// utility function for storing``    ``// strings into hashmap``    ``storeInMap(arr);``    ``return` `0;``}`

## Python3

 `# Python3 program for finding all anagram``# pairs in the given array``from` `collections ``import` `defaultdict` `# Utility function for``# printing anagram list``def` `printAnagram(store: ``dict``) ``-``> ``None``:``    ` `    ``for` `(k, v) ``in` `store.items():``        ``temp_vec ``=` `v``        ``size ``=` `len``(temp_vec)``        ` `        ``if` `(size > ``1``):``            ``for` `i ``in` `range``(size):``                ``print``(temp_vec[i], end ``=` `" "``)``                ` `            ``print``()` `# Utility function for storing``# the vector of strings into HashMap``def` `storeInMap(vec: ``list``) ``-``> ``None``:` `    ``store ``=` `defaultdict(``lambda``: ``list``)``    ` `    ``for` `i ``in` `range``(``len``(vec)):``        ``tempString ``=` `vec[i]``        ``tempString ``=` `''.join(``sorted``(tempString))` `        ``# Check for sorted string``        ``# if it already exists``        ``if` `(tempString ``not` `in` `store):``            ``temp_vec ``=` `[]``            ``temp_vec.append(vec[i])``            ``store[tempString] ``=` `temp_vec` `        ``else``:``            ` `            ``# Push new string to``            ``# already existing key``            ``temp_vec ``=` `store[tempString]``            ``temp_vec.append(vec[i])``            ``store[tempString] ``=` `temp_vec` `    ``# Print utility function for``    ``# printing all the anagrams``    ``printAnagram(store)` `# Driver code``if` `__name__ ``=``=` `"__main__"``:` `    ``# Initialize vector of strings``    ``arr ``=` `[]``    ``arr.append(``"geeksquiz"``)``    ``arr.append(``"geeksforgeeks"``)``    ``arr.append(``"abcd"``)``    ``arr.append(``"forgeeksgeeks"``)``    ``arr.append(``"zuiqkeegs"``)``    ``arr.append(``"cat"``)``    ``arr.append(``"act"``)``    ``arr.append(``"tca"``)` `    ``# Utility function for storing``    ``# strings into hashmap``    ``storeInMap(arr)` `# This code is contributed by sanjeev2552`

Note: Compile above program with -std=c++11 flag in g++

Output:

```cat act tca
geeksforgeeks forgeeksgeeks
geeksquiz zuiqkeegs ```

Complexity Analysis:

• Time Complexity: O(n * m(log m)),  where m is the length of a word.
A single traversal through the array is needed.
• Space Complexity: O(n).
There are n words in a string. The map requires O(n) space to store the strings.

This article is contributed by Mandeep Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.