49. 字母异位词分组
题目:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
- 所有输入均为小写字母。
- 不考虑答案输出的顺序。
代码1:
import java.util.Arrays;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
var list =new ArrayList<List<String>>();
var array=new ArrayList<String>();
array.add(strs[0]);
list.add(array);
for(int i=1;i<strs.length;i++){
boolean bl=false;
for(int j=0;j<list.size();j++){
if(match(list.get(j).get(0),strs[i])){
list.get(j).add(strs[i]);
bl=true;
break;
}
}
if(bl){continue;}
array=new ArrayList<String>();
array.add(strs[i]);
list.add(array);
}
return list;
}
//match方法比较串是否含有相同字符 先转换成数组(字符/字节),再对数组排序,再比较数组
public static boolean match(String arr,String str){
if(arr.length()!=str.length()){return false;}
byte[] b1=arr.getBytes();
byte[] b2=str.getBytes();
Arrays.sort(b1);
Arrays.sort(b2);
return Arrays.equals(b1,b2);
}
}

代码2:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,ArrayList<String>> map=new HashMap<String,ArrayList<String>>();
for(String str:strs){
char[] ch= str.toCharArray();
Arrays.sort(ch);
String key=String.valueOf(ch);
if(!map.containsKey(key)){
map.put(key,new ArrayList<String>());
}
map.get(key).add(str);
}
return new ArrayList(map.values());
}
}
方法三:26个英文字母分别对应一个质数,求每个String的乘积,乘积相同就是异位词。
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术