</>

Technology

Java Programs

Difficulty

Intermediate

Interview Question

Write a Java program to check if two strings are anagrams of each other.

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()
    );
}

Follow AutomateQA