Friday, February 7, 2014

Anagrams

Write a program to sort an array of strings so that all anagrams are next to each other.
public class Anagrams {
	public List anagrams(String[] strs) {
		ArrayList result = new ArrayList();
		if (strs == null || strs.length == 0) {
		    return result;
		}
                HashMap> map = 
        		new HashMap>();
                for (String str: strs) {
        	    String newStr = sortChar(str);
        	    if (!map.containsKey(newStr)) {
        		map.put(newStr, new ArrayList());
        	    }
        	ArrayList anagrams = map.get(newStr);
        	anagrams.add(str);
                }
        
                for (String key: map.keySet()) {
        	    ArrayList anagrams = map.get(key);
        	    if (anagrams.size() > 1) {
        		    // or it will return [""], but expected []
        		    result.addAll(anagrams);
        	    }
        	
                }
                return result;
        
        }
	// Sort each str
	public String sortChar(String str) {
		char[] chr = str.toCharArray();
		java.util.Arrays.sort(chr);
		return new String(chr);
	}
	
}

No comments:

Post a Comment