package com.interview.leetcode.strings; import com.interview.leetcode.math.Numbers; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * Created_By: stefanie * Date: 14-11-26 * Time: 下午11:14 */ public class Anagram { static int[] primes = Numbers.generatePrim(26); public List<String> anagrams(String[] strs) { ArrayList<String> result = new ArrayList<String>(); HashMap<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>(); for(String s : strs){ int identity = getIdentity(s); ArrayList<String> lists = map.get(identity); if(lists == null){ lists = new ArrayList<String>(); map.put(identity, lists); } lists.add(s); } for(ArrayList<String> lists : map.values()){ if(lists.size() > 1){ result.addAll(lists); } } return result; } public int getIdentity(String s){ //get a identity of the string based on prime number product int identity = 1; for(char ch : s.toCharArray()) identity *= primes[ch - 'a']; return identity; } }