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