import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
/**
* Write a method to decide if two strings are anagrams or not.
*/
public class StringAnagrams extends TestCase {
public static boolean areAnagrams(String s1, String s2) {
if (s1 == null) {
throw new NullPointerException("Argument 's1' can not be null.");
}
if (s2 == null) {
throw new NullPointerException("Argument 's2' can not be null.");
}
Map<Character, Integer> charMap = new HashMap<Character, Integer>();
stringIntoCharMapWithValues(s1, charMap, 1);
stringIntoCharMapWithValues(s2, charMap, -1);
return isMapOfNumbersAllZeroes(charMap);
}
public static <K, V extends Number> boolean isMapOfNumbersAllZeroes(
Map<K, V> map) {
for (Number i : map.values()) {
if (!i.equals(0)) {
return false;
}
}
return true;
}
public static void stringIntoCharMapWithValues(String string,
Map<Character, Integer> map, int value) {
int length = string.length();
for (int i = 0; i < length; i++) {
char c = string.charAt(i);
if (Character.isWhitespace(c)
|| (!Character.isLetter(c) && !Character.isDigit(c))) {
continue;
}
if (map.containsKey(c)) {
map.put(c, map.get(c) + value);
} else {
map.put(c, value);
}
}
}
public static void testAreAnagrams() {
try {
areAnagrams(null, "a");
} catch (NullPointerException e) {
}
try {
areAnagrams("a", null);
} catch (NullPointerException e) {
}
try {
areAnagrams(null, null);
} catch (NullPointerException e) {
}
assertTrue(areAnagrams("", ""));
assertTrue(areAnagrams("a", "a"));
assertFalse(areAnagrams("a", ""));
assertFalse(areAnagrams("", "a"));
assertTrue(areAnagrams("ab", "ab"));
assertTrue(areAnagrams("ab", "ba"));
assertFalse(areAnagrams("ab", "bc"));
assertFalse(areAnagrams("ab", "b c"));
assertTrue(areAnagrams("ab", "b a"));
assertTrue(areAnagrams(" ab", "ba "));
assertTrue(areAnagrams("a4 b", "4b a"));
assertFalse(areAnagrams("a4 b", "5b a"));
assertFalse(areAnagrams("aa", "a"));
assertTrue(areAnagrams("a,b,c.", "- 'c b a'"));
}
}
Friday, August 17, 2012
Write a method to decide if two strings are anagrams or not
Write a method to decide if two strings are anagrams or not.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment