8.字母异位分组

题目描述:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
所有输入均为小写字母。
不考虑答案输出的顺序。
解析:
①将字符串数组中的每一个字符串转成字符数组排序,如果是异位词,则排序后的字符数组相同;
②利用map集合将排序后的异位词作为key值,ArrayList< String >作为value,即异位词只对应一个key值,异位词存在key对应的value中(ArrayList);
③遍历字符串数组,如果map中出现异位词,则将其加入到对应map中的value值中;
④取出map集合中所有value值加入到List中返回。

public List<List<String>> groupAnagrams(String[] strs) {
      HashMap<String,List<String>> hashmap = new HashMap<String,List<String>>();
      List<List<String>> lists = new ArrayList<>();
      for (int i = 0; i < strs.length; i ++){
       //将每一个单词字符转换成字符数组
       char[] arrchar = strs[i].toCharArray();
       //对每个字符数组进行排序,异位词字符排序后相同
       Arrays.sort(arrchar);
       //将排序后的异位词字符数组转换成字符串
       String s = String.valueOf(arrchar);
       //如果hashmap中不含有s,则不是异位词,增加新的List
       //即每一种异位词对应一个List
       if (!hashmap.containsKey(s))
        hashmap.put(s, new ArrayList<String>());
       //将异位词添加到同一个List中
       hashmap.get(s).add(strs[i]);
      }
      //遍历hashmap中的中value值,即不同异位词的List,将其添加到同一个List中返回
      for (List<String> list : hashmap.values()) {
   lists.add(list);
  }
      return lists;
     }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值