import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param strs string字符串一维数组
* @return string字符串一维数组
*/
public static String[] groupAnagrams (String[] strs) {
// write code here
Arrays.sort(strs);
LinkedList<LinkedList<String>> linkedLists = new LinkedList<>();
for (int i = 0; i < strs.length; i++) {
boolean flag = false;
for (int j = 0; j < linkedLists.size(); j++) {
if (isSameConstruct(strs[i],
linkedLists.get(j).get(linkedLists.get(j).size() - 1))) {
linkedLists.get(j).add(strs[i]);
flag = true;
break;
}
}
if (!flag) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add(strs[i]);
linkedLists.add(linkedList);
}
}
String[] strings = new String[linkedLists.size()];
for (int i = 0; i < linkedLists.size(); i++) {
strings[i] = concat(linkedLists.get(i));
}
return strings;
}
public static String concat(LinkedList<String> linkedList) {
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < linkedList.size(); i++) {
stringBuffer.append(linkedList.get(i) + ",");
}
return stringBuffer.substring(0, stringBuffer.length() - 1);
}
public static boolean isSameConstruct(String string1, String string2) {
if (string1.length() != string2.length()) {
return false;
}
Map<Character, Integer> map1 = new HashMap<>();
Map<Character, Integer> map2 = new HashMap<>();
for (int i = 0; i < string1.length(); i++) {
map1.put(string1.charAt(i), map1.getOrDefault(string1.charAt(i), 0) + 1);
}
for (int j = 0; j < string2.length(); j++) {
map2.put(string2.charAt(j), map2.getOrDefault(string2.charAt(j), 0) + 1);
}
for (Map.Entry<Character, Integer> myMap : map1.entrySet()) {
if (!myMap.getValue().equals(map2.get(myMap.getKey()))) {
return false;
}
}
return true;
}
}
本题主要考察的知识点是字符串,所用编程语言是java.
我额外定义了两个函数,一个函数用于判断两个字符串是否由相同的字符组成,一个函数用于将LinkedList里面存储的字符串转化为一个字符串,剩下的就是遍历整个字符串数组就行了。

京公网安备 11010502036488号