Answer
Check if Two Strings are Anagrams
Method 1: Sort and Compare (Simplest)
Java
import java.util.Arrays;
public class AnagramCheck {
public static void main(String[] args) {
String s1 = "listen";
String s2 = "silent";
// Convert to char arrays, sort, compare
char[] arr1 = s1.toLowerCase().toCharArray();
char[] arr2 = s2.toLowerCase().toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
if (Arrays.equals(arr1, arr2)) {
System.out.println(s1 + " and " + s2 + " ARE anagrams");
} else {
System.out.println(s1 + " and " + s2 + " are NOT anagrams");
}
}
}
Output
CODE
listen and silent ARE anagrams
Method 2: Character Frequency Array (O(n) — Fastest)
Java
public static boolean isAnagram(String s1, String s2) {
if (s1.length() != s2.length()) return false;
int[] freq = new int[26]; // 26 letters a-z
for (char c : s1.toLowerCase().toCharArray()) freq[c - 'a']++;
for (char c : s2.toLowerCase().toCharArray()) freq[c - 'a']--;
for (int count : freq) {
if (count != 0) return false;
}
return true;
}
System.out.println(isAnagram("listen", "silent")); // true
System.out.println(isAnagram("hello", "world")); // false
System.out.println(isAnagram("Triangle", "Integral")); // true
Method 3: HashMap Frequency Map
Java
import java.util.HashMap;
public static boolean isAnagramMap(String s1, String s2) {
if (s1.length() != s2.length()) return false;
HashMap<Character, Integer> map = new HashMap<>();
// Increment count for s1 characters
for (char c : s1.toLowerCase().toCharArray())
map.put(c, map.getOrDefault(c, 0) + 1);
// Decrement count for s2 characters
for (char c : s2.toLowerCase().toCharArray()) {
if (!map.containsKey(c) || map.get(c) == 0) return false;
map.put(c, map.get(c) - 1);
}
return true;
}
Test Multiple Pairs
Java
String[][] pairs = {
{"listen", "silent"},
{"hello", "world"},
{"Astronomer", "Moon starer"},
{"abc", "cba"},
{"Java", "avaj"}
};
for (String[] pair : pairs) {
String a = pair[0].replaceAll("\\s", "");
String b = pair[1].replaceAll("\\s", "");
System.out.printf("%-15s %-15s → %s%n",
pair[0], pair[1], isAnagram(a, b) ? "Anagram" : "Not Anagram");
}
Output
CODE
listen silent → Anagram
hello world → Not Anagram
Astronomer Moon starer → Anagram
abc cba → Anagram
Java avaj → Anagram
Using Java 8 Stream
Java
public static boolean isAnagramStream(String s1, String s2) {
return Arrays.equals(
s1.toLowerCase().chars().sorted().toArray(),
s2.toLowerCase().chars().sorted().toArray()
);
}
