这道题是要将字符串数组进行归类,比如"eat","aet","tea"这种就是一类,也就是说构造相同,但是顺序不同的进行归类,那么首先就要进行遍历,针对每一个字符串都进行排序,然后根据排序后的字符串放入map中进行标记,方便后续进行归档。那么代码如下
public class groupAnagrams {
public static List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new ArrayList<>();
Map<String, Integer> m = new HashMap<>();
for(int i=0;i<strs.length;i++){
String temp = reOrder(strs[i]);
if(m.get(temp)!=null){
List<String> l = res.get(m.get(temp));
l.add(strs[i]);
res.set(m.get(temp),l);
}else {
List<String> l = new ArrayList<>();
l.add(strs[i]);
res.add(l);
m.put(temp,res.size()-1);
}
}
return res;
}
public static String reOrder(String str){
char[] ctr = str.toCharArray();
StringBuilder sb = new StringBuilder();
for(int i=0;i<ctr.length;i++){
for(int k=0;k<i;k++){
if(ctr[k]>ctr[i]){
char temp = ctr[k];
ctr[k]=ctr[i];
ctr[i]=temp;
}
}
}
return String.valueOf(ctr);
}
public static void main(String[] args) {
String[] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
List<List<String>> res = groupAnagrams(strs);
for(int i=0;i<res.size();i++){
for(int k=0;k<res.get(i).size();k++){
System.out.print(res.get(i).get(k)+",");
}
System.out.println();
}
}
}
网友评论