Java Check Anagram

Determine if two strings contain the same characters in different order

πŸ”€ What is an Anagram?

An anagram is formed by rearranging letters of another word using all original letters exactly once. Examples: "listen" and "silent", "evil" and "vile", "heart" and "earth".


// Simple anagram check
import java.util.Arrays;

public class AnagramCheck {
    public static void main(String[] args) {
        String word1 = "listen";
        String word2 = "silent";
        
        if (areAnagrams(word1, word2)) {
            System.out.println(word1 + " and " + word2 + " are anagrams!");
        } else {
            System.out.println(word1 + " and " + word2 + " are not anagrams.");
        }
    }
    
    static boolean areAnagrams(String str1, String str2) {
        char[] arr1 = str1.toLowerCase().toCharArray();
        char[] arr2 = str2.toLowerCase().toCharArray();
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        return Arrays.equals(arr1, arr2);
    }
}
                                    

Output:

listen and silent are anagrams!

Different Checking Methods

πŸ“Š

Sorting Method

Sort both strings and compare

static boolean areAnagrams(String s1, String s2) {
    char[] arr1 = s1.toLowerCase().toCharArray();
    char[] arr2 = s2.toLowerCase().toCharArray();
    Arrays.sort(arr1);
    Arrays.sort(arr2);
    return Arrays.equals(arr1, arr2);
}
πŸ”’

Character Count

Count frequency of each character

static boolean areAnagrams(String s1, String s2) {
    if (s1.length() != s2.length()) return false;
    int[] count = new int[26];
    for (int i = 0; i < s1.length(); i++) {
        count[s1.charAt(i) - 'a']++;
        count[s2.charAt(i) - 'a']--;
    }
    for (int c : count) if (c != 0) return false;
    return true;
}
πŸ—ΊοΈ

HashMap Method

Use HashMap for character counting

static boolean areAnagrams(String s1, String s2) {
    Map map = new HashMap<>();
    for (char c : s1.toCharArray()) {
        map.put(c, map.getOrDefault(c, 0) + 1);
    }
    for (char c : s2.toCharArray()) {
        map.put(c, map.getOrDefault(c, 0) - 1);
    }
    return map.values().stream().allMatch(v -> v == 0);
}
🧹

Ignore Spaces

Handle phrases with spaces

static boolean areAnagrams(String s1, String s2) {
    s1 = s1.replaceAll("\\s", "").toLowerCase();
    s2 = s2.replaceAll("\\s", "").toLowerCase();
    char[] arr1 = s1.toCharArray();
    char[] arr2 = s2.toCharArray();
    Arrays.sort(arr1);
    Arrays.sort(arr2);
    return Arrays.equals(arr1, arr2);
}

πŸ”Ή Complete Anagram Program

Here's a comprehensive program with multiple anagram checking methods:

import java.util.*;

public class AnagramComplete {
    public static void main(String[] args) {
        String[][] testPairs = {
            {"listen", "silent"},
            {"evil", "vile"},
            {"hello", "world"},
            {"The Eyes", "They See"},
            {"Astronomer", "Moon starer"}
        };
        
        System.out.println("Anagram Tests:");
        for (String[] pair : testPairs) {
            boolean result1 = areAnagramsSorting(pair[0], pair[1]);
            boolean result2 = areAnagramsCounting(pair[0], pair[1]);
            System.out.println("'" + pair[0] + "' and '" + pair[1] + "' -> " + result1);
        }
        
        // Test with phrases (ignoring spaces)
        System.out.println("\nPhrase Anagram Tests (ignoring spaces):");
        System.out.println("'The Eyes' and 'They See' -> " + 
            areAnagramsIgnoreSpaces("The Eyes", "They See"));
    }
    
    // Method 1: Sorting approach
    static boolean areAnagramsSorting(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }
        
        char[] arr1 = str1.toLowerCase().toCharArray();
        char[] arr2 = str2.toLowerCase().toCharArray();
        
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        
        return Arrays.equals(arr1, arr2);
    }
    
    // Method 2: Character counting
    static boolean areAnagramsCounting(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }
        
        int[] count = new int[26];
        str1 = str1.toLowerCase();
        str2 = str2.toLowerCase();
        
        for (int i = 0; i < str1.length(); i++) {
            count[str1.charAt(i) - 'a']++;
            count[str2.charAt(i) - 'a']--;
        }
        
        for (int c : count) {
            if (c != 0) return false;
        }
        return true;
    }
    
    // Method 3: Ignore spaces and case
    static boolean areAnagramsIgnoreSpaces(String str1, String str2) {
        str1 = str1.replaceAll("\\s", "").toLowerCase();
        str2 = str2.replaceAll("\\s", "").toLowerCase();
        
        if (str1.length() != str2.length()) {
            return false;
        }
        
        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();
        
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        
        return Arrays.equals(arr1, arr2);
    }
}

Output:

Anagram Tests:
'listen' and 'silent' -> true
'evil' and 'vile' -> true
'hello' and 'world' -> false
'The Eyes' and 'They See' -> false
'Astronomer' and 'Moon starer' -> false

Phrase Anagram Tests (ignoring spaces):
'The Eyes' and 'They See' -> true

🧠 Test Your Knowledge

Which pair are anagrams?