From 56844a11545dded12af22b87ec83d7541495df6d Mon Sep 17 00:00:00 2001 From: Shivam Choudhary Date: Thu, 7 Oct 2021 07:58:11 +0530 Subject: [PATCH 1/6] Anagram Solution in java Anagram Solution in java --- src/anagram/anagram.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/anagram/anagram.java diff --git a/src/anagram/anagram.java b/src/anagram/anagram.java new file mode 100644 index 0000000..c4b6278 --- /dev/null +++ b/src/anagram/anagram.java @@ -0,0 +1,35 @@ + public List> groupAnagramsCategorizeByFrequency(String[] strs) { + + // Check for empty inputs + if (strs == null || strs.length == 0) + return new ArrayList<>(); + + Map> frequencyStringsMap = new HashMap<>(); + for (String str : strs) { + + String frequencyString = getFrequencyString(str); + + // If the frequency string is present, add the string to the list + if (frequencyStringsMap.containsKey(frequencyString)) { + frequencyStringsMap.get(frequencyString).add(str); + } + else { + // else create a new list + List strList = new ArrayList<>(); + strList.add(str); + frequencyStringsMap.put(frequencyString, strList); + } + } + + return new ArrayList<>(frequencyStringsMap.values()); + } + + private String getFrequencyString(String str) { + + // Frequency buckets + int[] freq = new int[26]; + + // Iterate over each character + for (char c : str.toCharArray()) { + freq++; + } \ No newline at end of file From 9a0a08a10c0bdec9d31320cdbade699301b4ff5e Mon Sep 17 00:00:00 2001 From: Shivam Choudhary <53565563+ShivamChoudhary17@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:14:45 +0530 Subject: [PATCH 2/6] Update anagram.java --- src/anagram/anagram.java | 47 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/src/anagram/anagram.java b/src/anagram/anagram.java index c4b6278..205297c 100644 --- a/src/anagram/anagram.java +++ b/src/anagram/anagram.java @@ -1,4 +1,32 @@ - public List> groupAnagramsCategorizeByFrequency(String[] strs) { + import java.util.*; + +class GroupAnagrams { + + public List> groupAnagramsCategorizeBySorting(String[] strs) { + + if (strs == null || strs.length == 0) + return new ArrayList<>(); + + Map> stringAnagramsMap = new HashMap<>(); + for (String s : strs) { + char[] arr = s.toCharArray(); + Arrays.sort(arr); + String key = String.valueOf(arr); + + if (!stringAnagramsMap.containsKey(key)) + stringAnagramsMap.put(key, new ArrayList<>()); + + stringAnagramsMap.get(key).add(s); + } + + List> resultList = new ArrayList<>(); + for (Map.Entry> stringAnagrams : stringAnagramsMap.entrySet()) { + resultList.add(stringAnagrams.getValue()); + } + return resultList; + } + + public List> groupAnagramsCategorizeByFrequency(String[] strs) { // Check for empty inputs if (strs == null || strs.length == 0) @@ -31,5 +59,18 @@ private String getFrequencyString(String str) { // Iterate over each character for (char c : str.toCharArray()) { - freq++; - } \ No newline at end of file + freq[c - 'a']++; + } + + // Start creating the frequency string + StringBuilder frequencyString = new StringBuilder(""); + char c = 'a'; + for (int i : freq) { + frequencyString.append(c); + frequencyString.append(i); + c++; + } + + return frequencyString.toString(); + } +} From 1486eaf6a9bff536fe5dce92c23983c87aef54d4 Mon Sep 17 00:00:00 2001 From: Shivam Choudhary <53565563+ShivamChoudhary17@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:15:50 +0530 Subject: [PATCH 3/6] Update problem.md --- src/anagram/problem.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/anagram/problem.md b/src/anagram/problem.md index 2012421..181c98d 100644 --- a/src/anagram/problem.md +++ b/src/anagram/problem.md @@ -27,4 +27,5 @@ Constraints: ``` -*Expected Time Complexity: O(n)* \ No newline at end of file +*Time Complexity: O(n * k)O(n∗k) (k is the length of the largest string)* +*Space Complexity: O(n)O(n)* From 19ff8b03ca7afc0a62e7f54e979814d3b1c39a13 Mon Sep 17 00:00:00 2001 From: Shivam Choudhary <53565563+ShivamChoudhary17@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:16:09 +0530 Subject: [PATCH 4/6] Update problem.md --- src/anagram/problem.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/anagram/problem.md b/src/anagram/problem.md index 181c98d..d21a489 100644 --- a/src/anagram/problem.md +++ b/src/anagram/problem.md @@ -28,4 +28,5 @@ Constraints: *Time Complexity: O(n * k)O(n∗k) (k is the length of the largest string)* + *Space Complexity: O(n)O(n)* From 3525458c58e1976848eb87228064cfaed569b5fb Mon Sep 17 00:00:00 2001 From: Shivam Choudhary <53565563+ShivamChoudhary17@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:16:48 +0530 Subject: [PATCH 5/6] Update problem.md --- src/anagram/problem.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/anagram/problem.md b/src/anagram/problem.md index d21a489..7fa0c5a 100644 --- a/src/anagram/problem.md +++ b/src/anagram/problem.md @@ -27,6 +27,6 @@ Constraints: ``` -*Time Complexity: O(n * k)O(n∗k) (k is the length of the largest string)* +*Time Complexity: O(n * k) (k is the length of the largest string)* -*Space Complexity: O(n)O(n)* +*Space Complexity: O(n)* From e8ca081c7aac2f5c8e2aba370cec561304a5e98a Mon Sep 17 00:00:00 2001 From: Shivam Choudhary <53565563+ShivamChoudhary17@users.noreply.github.com> Date: Fri, 8 Oct 2021 08:01:13 +0530 Subject: [PATCH 6/6] Update anagram.java --- src/anagram/anagram.java | 113 ++++++++++++++------------------------- 1 file changed, 40 insertions(+), 73 deletions(-) diff --git a/src/anagram/anagram.java b/src/anagram/anagram.java index 205297c..e955cfb 100644 --- a/src/anagram/anagram.java +++ b/src/anagram/anagram.java @@ -1,76 +1,43 @@ import java.util.*; - -class GroupAnagrams { - - public List> groupAnagramsCategorizeBySorting(String[] strs) { - - if (strs == null || strs.length == 0) - return new ArrayList<>(); - - Map> stringAnagramsMap = new HashMap<>(); - for (String s : strs) { - char[] arr = s.toCharArray(); - Arrays.sort(arr); - String key = String.valueOf(arr); - - if (!stringAnagramsMap.containsKey(key)) - stringAnagramsMap.put(key, new ArrayList<>()); - - stringAnagramsMap.get(key).add(s); - } - - List> resultList = new ArrayList<>(); - for (Map.Entry> stringAnagrams : stringAnagramsMap.entrySet()) { - resultList.add(stringAnagrams.getValue()); - } - return resultList; - } - - public List> groupAnagramsCategorizeByFrequency(String[] strs) { - - // Check for empty inputs - if (strs == null || strs.length == 0) - return new ArrayList<>(); - - Map> frequencyStringsMap = new HashMap<>(); - for (String str : strs) { - - String frequencyString = getFrequencyString(str); - - // If the frequency string is present, add the string to the list - if (frequencyStringsMap.containsKey(frequencyString)) { - frequencyStringsMap.get(frequencyString).add(str); + public class GroupAnagramTogether { + + public static List> groupAnagrams(String[] strs) { + + List> result = new ArrayList<>(); + + //Initialize hashmap + HashMap> map = new HashMap<>(); + + //Traverse a list of string + for(String str: strs){ + + //Convert to character array + char[] chArr = str.toCharArray(); + //Sort character array + Arrays.sort(chArr); + //Create a string + String key = new String(chArr); + + //Create a key from a sorted string + //if this key is found add new string element + if(map.containsKey(key)){ + map.get(key).add(str); + + } else { + List strList = new ArrayList<>(); + strList.add(str); + map.put(key, strList); + } + } + + result.addAll(map.values()); + return result; + } + + public static void main(String[] args) { + + String[] strs = {"abc", "bca", "elf", "aab", "fle", "cab", "lel", "123", "231", "324"}; + List> result = groupAnagrams(strs); + result.forEach(t -> System.out.println(t + " ")); } - else { - // else create a new list - List strList = new ArrayList<>(); - strList.add(str); - frequencyStringsMap.put(frequencyString, strList); - } - } - - return new ArrayList<>(frequencyStringsMap.values()); - } - - private String getFrequencyString(String str) { - - // Frequency buckets - int[] freq = new int[26]; - - // Iterate over each character - for (char c : str.toCharArray()) { - freq[c - 'a']++; - } - - // Start creating the frequency string - StringBuilder frequencyString = new StringBuilder(""); - char c = 'a'; - for (int i : freq) { - frequencyString.append(c); - frequencyString.append(i); - c++; - } - - return frequencyString.toString(); - } }