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的乘积,乘积相同就是异位词。

 

 

posted @   堤苏白  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· 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应用必不可少的技术
点击右上角即可分享
微信分享提示