Algorithm/src/main/java/hash/GroupAnagrams.java

87 lines
2.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package hash;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
* 题目49.字母异位词分组 (groupAnagrams)
* 描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
* 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
* 链接https://leetcode.cn/problems/group-anagrams
*
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
*/
//做出来了。
public class GroupAnagrams {
//计数
public List<List<String>> groupAnagrams1(String[] strs) {
// 创建一个 Map键是编码后的字符串值是字母异位词列表
HashMap<String, List<String>> map = new HashMap<>();
// 遍历输入数组
for (String str : strs) {
// 统计每个字母出现的次数
int[] count = new int[26];
for (char c : str.toCharArray()) {
count[c - 'a']++; // 统计字母出现次数
}
// 将字母统计结果编码为字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 26; i++) {
sb.append('#'); //必须加 [bdddddddddd, bbbbbbbbbbc] 都是01010... 01010...
sb.append(count[i]);
}
String key = sb.toString();
// 如果 Map 中不存在该键,则创建一个新的列表
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
// 将当前单词添加到对应的列表中
map.get(key).add(str);
}
// 返回 Map 中的所有值(即字母异位词列表)
return new ArrayList<>(map.values());
}
//排序
public List<List<String>> groupAnagrams(String[] strs) {
// 创建一个 Map键是标准化后的字符串值是字母异位词列表
HashMap<String, List<String>> map = new HashMap<>();
// 遍历输入数组
for (String str : strs) {
// 将单词转换为字符数组并排序
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
String sortedStr = new String(charArray);
// 如果 Map 中不存在该键,则创建一个新的列表
if (!map.containsKey(sortedStr)) {
map.put(sortedStr, new ArrayList<>());
}
// 将当前单词添加到对应的列表中
map.get(sortedStr).add(str);
}
// 返回 Map 中的所有值(即字母异位词列表)
return new ArrayList<>(map.values());
}
}