算法-字母异位词分组(中等)

原题:

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 :

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

思路分析:

        1、判断是否是异位词

        2、将同一类异位词存储起来

        如何去判断两个字符串是不是异位词呢,分析实例中的字符串,在输出里面,nat和tan是异位词,他们都有一样的字母组成,n,a,t三个字母,那如果将nat和tan都看成字符串数组,并且统一按照自然排序的话,nat和tan都会被排序成a,n,t,这样就可以判断他们相同了,所以可以使用排序的方式,去存储每个字符串按照自然排序后的结果。

        那么用什么来存这个排序后的内容呢,想了一下,排序后的内容,需要用来查询,因为属于异位词的字符串需要放到同一个数组里面。既需要存储排序后的字符串,又需要存储一个字符串数组,还要方便查询,那很容易就想到了用哈希表来存储Map<String,List<String>>。

        由此分析完成,可以开始写代码了。

        首先新建个类,SolutionGroupAnagrams,包含一个处理字符串并输出异位词结果的方法。

public class SolutionGroupAnagrams {
    public List<List<String>> groupAnagrams(String[] strs){


    }
}

        只有一层for循环,对每个字符串进行排序,取到自然排序的字符串,并放入一个map里面。

public class SolutionGroupAnagrams {
    public List<List<String>> groupAnagrams(String[] strs){

        //解题思路
        //将异位词的字母排序以后,同一组异位词的排序结果应该是一样的
        //用排序结果作为key,List<String>作为value放入哈希表中
        //使用哈希表存储,最后直接输出哈希表的vaules即可获得目标列表
        Map<String,List<String>> map = new HashMap<>();
        for(String str : strs){
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String key = new String(charArray);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<>(map.values());
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值