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