diff --git a/GroupAnagrams.java b/GroupAnagrams.java new file mode 100644 index 00000000..00968475 --- /dev/null +++ b/GroupAnagrams.java @@ -0,0 +1,19 @@ +import java.util.*; + +// O(n*m) time, O(n) space; +class Solution { + public List> groupAnagrams(String[] strs) { + Map> map = new HashMap<>(); + for (String str : strs) { + int[] freq = new int[26]; + for (char c : str.toCharArray()) { + freq[c - 'a']++; + } + String key = Arrays.toString(freq); + map.putIfAbsent(key, new ArrayList<>()); + + map.get(key).add(str); + } + return new ArrayList<>(map.values()); + } +} diff --git a/IsomorphicStrings.java b/IsomorphicStrings.java new file mode 100644 index 00000000..2e3a7fde --- /dev/null +++ b/IsomorphicStrings.java @@ -0,0 +1,22 @@ +import java.util.*; + +// O(n) time, O(1) space since only 26 chars +class Solution { + public boolean isIsomorphic(String s, String t) { + Map sMap = new HashMap<>(); + Map tMap = new HashMap<>(); + + for (int i = 0; i < s.length(); i++) { + char sChar = s.charAt(i); + char tChar = t.charAt(i); + + sMap.putIfAbsent(sChar, tChar); + tMap.putIfAbsent(tChar, sChar); + + if ((sMap.get(sChar) != tChar) || (tMap.get(tChar) != sChar)) { + return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/WordPattern.java b/WordPattern.java new file mode 100644 index 00000000..4d0d71de --- /dev/null +++ b/WordPattern.java @@ -0,0 +1,27 @@ +import java.util.*; + +// O(n) time, O(n) space + +class Solution { + public boolean wordPattern(String pattern, String s) { + String[] parts = s.split(" "); + + if (parts.length != pattern.length()) return false; + + Map charMap = new HashMap<>(); + Map wordMap = new HashMap<>(); + + for (int i = 0; i < pattern.length(); i++) { + char c = pattern.charAt(i); + String word = parts[i]; + + charMap.putIfAbsent(c, word); + wordMap.putIfAbsent(word, c); + + if ((!charMap.get(c).equals(word)) || (!wordMap.get(word).equals(c))) { + return false; + } + } + return true; + } +}