leetcode 60: Anagrams
AnagramsMar
19 '12
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
public class Solution { public ArrayList<String> anagrams(String[] strs) { // Start typing your Java solution below // DO NOT write main() function Map<String, LinkedList<String>> map = new HashMap<String, LinkedList<String>>(); ArrayList<String> rel = new ArrayList<String>(); for( int i=0; i<strs.length; i++) { char[] c = strs[i].toCharArray(); Arrays.sort(c); String s = new String(c); //!!!!alert!!! super important. != t.toString(){ [C@6e1408 } if( map.containsKey(s) ) { map.get(s).add( strs[i]); // add() will return false or true; } else { LinkedList<String> ll = new LinkedList<String>(); ll.add( strs[i] ); map.put(s, ll); } } for(LinkedList<String> ll : map.values() ) { if( ll.size() > 1) { rel.addAll( ll ); } } return rel; } }
public class Solution { public ArrayList<String> anagrams(String[] strs) { // Start typing your Java solution below // DO NOT write main() function ArrayList<String> rel = new ArrayList<String>(); if( strs.length <=1) return rel; Map<String, ArrayList<String> > ana = new HashMap<String, ArrayList<String> >(); int sz = strs.length; for(int i=0; i<sz; i++) { char[] ch = strs[i].toCharArray(); Arrays.sort(ch); String key = new String( ch ); if( ana.containsKey(key) ) { ana.get(key).add( strs[i] ); } else { ArrayList<String> temp = new ArrayList<String>(); temp.add( strs[i] ); ana.put(key, temp); } } for(String str : ana.keySet() ) { if( ana.get(str).size() >1){ rel.addAll( ana.get(str) ); } } return rel; } }