Anagrams, Any word or phrase that exactly reproduces the letters in another order is an anagram (Wiki).
Following programs shows two methods for checking two words are Anagrams or not.
Approach
Example :
Input : magic, gicma
Output : true
Input : magician, gicma
Output : false
Java Source
package string.ops;
import java.util.Arrays;
public class AnagramChecker {
public static boolean sortedChecker(String str1, String str2) {
if(str1.length() != str2.length())
return false;
char[] string1 = str1.toLowerCase().toCharArray();
char[] string2 = str2.toLowerCase().toCharArray();
Arrays.sort(string1);
Arrays.sort(string2);
return Arrays.equals(string1, string2);
}
public static boolean iterativeChecker(final String str1, final String str2) {
if(str1.length() != str2.length())
return false;
char[] string1 = str1.toLowerCase().toCharArray();
StringBuilder string2 = new StringBuilder(str2.toLowerCase());
for(char ch: string1) {
int index = string2.indexOf(String.valueOf(ch));
if(index==-1)
return false;
string2.deleteCharAt(index);
}
return true;
}
public static void main(String[] args) {
System.out.println("Iteative Checking:");
System.out.println(iterativeChecker("abcs","abcd"));
System.out.println(iterativeChecker("","abcd"));
System.out.println(iterativeChecker("dcba","abcd"));
System.out.println(iterativeChecker("",""));
System.out.println("Sorted Checking:");
System.out.println(sortedChecker("",""));
System.out.println(sortedChecker("magic","gicma"));
System.out.println(sortedChecker("magician","gicma"));
}
}
Following programs shows two methods for checking two words are Anagrams or not.
Approach
- Check strings for equality after sorting the strings in char Array.
- Iteratively check each Character in string1 is present in string2
Example :
Input : magic, gicma
Output : true
Input : magician, gicma
Output : false
Java Source
package string.ops;
import java.util.Arrays;
public class AnagramChecker {
public static boolean sortedChecker(String str1, String str2) {
if(str1.length() != str2.length())
return false;
char[] string1 = str1.toLowerCase().toCharArray();
char[] string2 = str2.toLowerCase().toCharArray();
Arrays.sort(string1);
Arrays.sort(string2);
return Arrays.equals(string1, string2);
}
public static boolean iterativeChecker(final String str1, final String str2) {
if(str1.length() != str2.length())
return false;
char[] string1 = str1.toLowerCase().toCharArray();
StringBuilder string2 = new StringBuilder(str2.toLowerCase());
for(char ch: string1) {
int index = string2.indexOf(String.valueOf(ch));
if(index==-1)
return false;
string2.deleteCharAt(index);
}
return true;
}
public static void main(String[] args) {
System.out.println("Iteative Checking:");
System.out.println(iterativeChecker("abcs","abcd"));
System.out.println(iterativeChecker("","abcd"));
System.out.println(iterativeChecker("dcba","abcd"));
System.out.println(iterativeChecker("",""));
System.out.println("Sorted Checking:");
System.out.println(sortedChecker("",""));
System.out.println(sortedChecker("magic","gicma"));
System.out.println(sortedChecker("magician","gicma"));
}
}