LeetCode刷题之HOT100之字母异位词分组

中午没有回宿舍午休,每次回去都没睡着,我想就没有必要回去了。京东买的书今天还没到,提前把题做了好专心做开发任务。

1、题目描述

在这里插入图片描述

2、逻辑分析

我看了几分钟,有点理解不了这道题需求是什么。看看题解。看了才理解题目的意思。字母异位词:两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。
解题步骤:同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的标志,哈希表的值为一组字母异位词列表。

3、代码演示

public List<List<String>> groupAnagrams(String[] strs) {
        // 创建一个HashMap,用于存储字母异位词(anagrams)的分组  
        // 键是排序后的字符串(代表一种字母组合),值是该组合对应的所有原始字符串列表
        Map<String, List<String>> map = new HashMap<>();
        // 遍历输入的字符串数组
        for(String str: strs){
             // 将当前字符串转换为字符数组 
            char[] arr = str.toCharArray();
            // 对字符数组进行排序,以消除字符的顺序差异 
            Arrays.sort(arr);
            // 将排序后的字符数组转换回字符串,作为HashMap的键
            String key = new String(arr);
            // 从HashMap中获取与当前键关联的列表(如果不存在则返回一个空列表)
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将当前原始字符串添加到列表中
            list.add(str);
            // 将更新后的列表重新放回HashMap中
            map.put(key, list);
        }
        // 将HashMap中所有的值(即所有的字符串列表)转换为一个新的ArrayList并返回  
        // 这样就得到了按字母异位词分组的结果 
        return new ArrayList<List<String>>(map.values());
    }

我将在IDE中运行代码放过来,可以打断点来一步步看怎么计算的。

package LeetCode;
import java.util.*;
public class groupAnagrams {
    public static void main(String[] args) {
        String[] strs = {"eat","tea","tan","ate","nat","bat"};
        List<List<String>> result = groupAnagrams(strs);
        for (List<String> value : result) {
            System.out.println(value);
        }
    }
    public static List<List<String>> groupAnagrams(String[] strs) {
        // 创建一个HashMap,用于存储字母异位词(anagrams)的分组
        // 键是排序后的字符串(代表一种字母组合),值是该组合对应的所有原始字符串列表
        Map<String, List<String>> map = new HashMap<>();
        // 遍历输入的字符串数组
        for(String str: strs){
            // 将当前字符串转换为字符数组
            char[] arr = str.toCharArray();
            // 对字符数组进行排序,以消除字符的顺序差异
            Arrays.sort(arr);
            // 将排序后的字符数组转换回字符串,作为HashMap的键
            String key = new String(arr);
            // 从HashMap中获取与当前键关联的列表(如果不存在则返回一个空列表)
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将当前原始字符串添加到列表中
            list.add(str);
            // 将更新后的列表重新放回HashMap中
            map.put(key, list);
        }
        // 将HashMap中所有的值(即所有的字符串列表)转换为一个新的ArrayList并返回
        // 这样就得到了按字母异位词分组的结果
        return new ArrayList<List<String>>(map.values());
    }
}

在这里插入图片描述
ok,第二种方法就不看啦,做其他事情去咯,再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值