Example 1:
Example 2:
Edge Cases to Consider:
Approach 1: Using a Frequency Counter (Time: O(n), Space: O(1))
Approach 2: Using Sorting (Time: O(n log n), Space: O(1))
public boolean isAnagramArrSol(String s, String t) {
if(s == null || t == null || s.length() != t.length()) return false;
int[] fr = new int[26];
// update frequency of chars
for(char c: s.toCharArray()) {
++fr[c - 'a'];
}
// match frequency
for(char c: t.toCharArray()) {
--fr[c - 'a'];
}
for(int i = 0; i < fr.length; i++) {
if(fr[i] != 0) return false;
}
return true;
}
public boolean isAnagramMapSol(String s, String t) {
if(s == null || t == null || s.length() != t.length()) return false;
Map<Character, Integer> map = new HashMap<>();
for(char c: s.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
for(char c: t.toCharArray()) {
Integer v = map.get(c);
if(v == null) {
return false;
} else {
if (v > 1) {
map.put(c, v - 1);
} else {
map.remove(c);
}
}
}
return map.isEmpty();
}
public boolean isAnagramSortSol(String s, String t) {
if(s == null || t == null || s.length() != t.length()) return false;
char[] sArray = s.toCharArray();
char[] tArray = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray, tArray);
}