package arrayandstring;
import java.util.*;
public class GroupAnagrams {
public static void main(String[] args) {
String[] strs = new String[] {"eat", "tea", "tan", "ate", "nat", "bat"};
GroupAnagrams groupAnagrams = new GroupAnagrams();
List<List<String>> res = groupAnagrams.groupAnagrams(strs);
for(List<String> list : res){
System.out.println(list);
}
}
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new ArrayList<>();
int strNum = strs.length;
int [] visited = new int[strNum];
for (int i = 0; i < strNum; i ++) {
if (visited[i] == 0) {
List<String> list = new ArrayList<>();
String s = strs[i];
list.add(s);
for (int j = i + 1; j < strNum; j ++) {
if (visited[j] == 0 && judge(s,strs[j])) {
list.add(strs[j]);
visited[j] = 1;
}
}
res.add(list);
}
}
return res;
}
public boolean judge(String s, String y) {
if (s.length() != y.length()) {
return false;
}
char[] ch1 = s.toCharArray();
char[] ch2 = y.toCharArray();
Arrays.sort(ch1);
Arrays.sort(ch2);
return Arrays.equals(ch1, ch2);
}
//将上述思路整理
public List<List<String>> groupAnagrams02(String[] strs) {
if (strs.length == 0) {
return new ArrayList<>();
}
Map<String, List<String>> map = new HashMap<>();
for (String s : strs) {
char [] ch = s.toCharArray();
Arrays.sort(ch);
String key = String.valueOf(ch);
if (!map.containsKey(key)) {
map.put(key,new ArrayList<>());
}
map.get(key).add(s);
}
return new ArrayList<>(map.values());
}
}
字母异位分词分组
最新推荐文章于 2024-04-22 23:14:38 发布