题目:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
题解:
小知识:LeetCode运行和提交的快捷键:
执行代码:Ctrl + '
提交:Ctrl + Enter
题解:使用map,将字母排序,然后当做key,接着看是否i排序完是不是包含key,如果不包含,就放到value里面呗。
package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> map = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
char[] s_arr = strs[i].toCharArray();
//排序
Arrays.sort(s_arr);
//映射到 key
String key = String.valueOf(s_arr);
//添加到对应的类中
if (map.containsKey(key)) {
map.get(key).add(strs[i]);
} else {
List<String> temp = new ArrayList<>();
temp.add(strs[i]);
map.put(key, temp);
}
}
return new ArrayList<>(map.values());// value加s = values
}
}
public class Main{
public static void main (String []args){
String[] a = {"eat", "tea", "tan", "ate", "nat", "bat"};
Solution p = new Solution();
List<List<String>> b = p.groupAnagrams(a);
System.out.print(" " + b);
}
}