题目描述
代码实现
/**
* 1,先排序再判断
字母异位词就是两个字符串中的字母都是一样的,
只不过顺序被打乱了,这里要把他们找出来,然后放到一起。
既然字母异位词的字母都是一样的,可以对字符串中的字符进行排序,
生成一个新的字符串,如果生成新的字符串相同,那么他们就是字母异位词。
* */
public List<List<String>> groupAnagrams(String[] strs) {
//边界条件判断
if (strs==null||strs.length==0) {
return new ArrayList<List<String>>();
}
//map中key存储的是字符串中字母排序后新的字符串
Map<String, List<String>> map=new HashMap<String, List<String>>();
for (int i = 0; i < strs.length; i++) {
//取出字符串,然后把它转化为字符数组
char[] c=strs[i].toCharArray();
//对字符数组进行排序
Arrays.sort(c);
//排序之后再把它转化为一个字符串
String keyStr=String.valueOf(c);
//判断map中有没有这个字符串,如果没有这个字符串
//说明还没有出现和这个字符串一样的字母异位词,
//要新建一个List,把它存放到map中
if (!map.containsKey(keyStr)) {
map.put(keyStr, new ArrayList<String>());
}
//把字符串存放到对应的list中
map.get(keyStr).add(strs[i]);
}
//最后返回
return new ArrayList<List<String>>(map.values());
}