LeetCode_Group Anagrams

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

  1. For the return value, each inner list’s elements must follow the lexicographic order.
  2. All inputs will be in lower-case.

以上是leetcode中该题的题目,意思是说给出一个string数组,要求把包含字母相同的string归为一类,并以List<List<String>>形式输出。比如“ate”“eat”“tea”这三个string都包含了a、e、t这三个字母,那么这三个string就放在同一个List中,最终输出多个这样的List。同时题目还要求同一个List中的各个string应该按照字典顺序排列,也就是a开头的string比z开头的string位置更靠前。


思路:hashmap的思想,如何才能将字母相同的归为一类,也就是说如何找key,可以先将string中的各个字母排好序,那么满足这个类的string的排好序的string一定完全相同,所以将排好序的string作为key,将满足这个key的所有string组成的list<String>作为value,最后将value中的list<String>排序且取出输出,即可。


Java解题:

public List<List<String>> groupAnagrams(String[] strs) {
		List<List<String>> result = new ArrayList<List<String>>();
		if(strs==null || strs.length==0)
			return result;
		Map<String,List<String>> map = new HashMap<String,List<String>>();
		char[] c = null;
		String s = "";
		for(int i = 0 ;i<strs.length;i++){
			List<String> temp_list = new ArrayList<String>();
			c = strs[i].toCharArray();
			Arrays.sort(c);
			s = String.valueOf(c);
			if(map.containsKey(s)){
				temp_list=map.get(s);
				temp_list.add(strs[i]);
			}
			else{
				temp_list.add(strs[i]);
			}
			Collections.sort(temp_list);
			map.put(s, temp_list);
		}

		Iterator<Entry<String, List<String>>> iter = map.entrySet().iterator();
		while (iter.hasNext()) {
			Map.Entry entry = (Map.Entry) iter.next();
			List<String> val = (List<String>) entry.getValue();
			result.add(val);
		}
		return result;
	}

最后,在Leetcode中,最上边还要加上:import java.util.Map.Entry;

才可以编译通过。

点赞