题目描述:
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
中文理解:
给定一个字符串数组,将字符串数组中字符组成相同的字符串聚在一起。
解题思路:
首先开辟一个和原始数组同样的大小的字符穿数组,然后将每个元素排序后放入新的数组中,然后使用hashmap将相同的字符串的下标放入key中,然后遍历hashmap,将字符串下标到原始数组中替换成字符串放入最终的结果中。
代码(java):
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> list=new ArrayList();
if(strs.length==0)return list;
HashMap<String,ArrayList<Integer>> map=new HashMap();
String[] strsCopy=new String[strs.length];
int i=0;
for(String str:strs){
char []strC=str.toCharArray();
Arrays.sort(strC);
str=new String(strC);
strsCopy[i++]=str;
}
i=0;
ArrayList<Integer> temp=new ArrayList();
for(String str:strsCopy){
if(map.containsKey(str)){
temp=map.get(str);
temp.add(i);
map.put(str,temp);
}
else{
temp=new ArrayList();
temp.add(i);
map.put(str,temp);
}
i++;
}
ArrayList<String> stemp=new ArrayList();
for(String str:map.keySet()){
stemp=new ArrayList();
for(int val:map.get(str)){
stemp.add(strs[val]);
}
list.add(stemp);
}
return list;
}
}