首页 > 其他分享 >LeetCode热题100-第2题

LeetCode热题100-第2题

时间:2024-06-20 23:28:37浏览次数:35  
标签:存储 string strs 异位 字母 热题 字符串 100 LeetCode

题目:49. 字母异位词分组 - 力扣(LeetCode)

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

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

示例1:

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

示例2:

输入: strs = [""]
输出: [[""]]

示例3:

输入: strs = ["a"]
输出: [["a"]]

分析:本题目需要将每个单词分别拆开成单独的字母,其字母组合是唯一的,不存在歧义,因此可以用哈希表将字母组合存储为键,而单词为值进行存储,最后遍历已经存储完毕的哈希表即可

python运用字典实现如下:

class Solution(object):
    def groupAnagrams(self, strs):
        anagrams = defaultdict(list)  # 创建一个默认字典,用于存储字母异位词的列表
        for str in strs:
            count = [0] * 26  # 创建一个长度为26的数组,用于记录'a'到'z'的频率
            for char in str:
                count[ord(char) - ord('a')] += 1  # 计算每个字符的频率
            anagrams[tuple(count)].append(str)  # 将频率数组转换为元组,以便它可以作为字典的键
        return list(anagrams.values())  # 返回所有字母异位词列表的列表

C++运用map来存储,但字母的组合必须转换成字符串,如下:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        // 创建一个unordered_map,用于存储字母异位词的分组
        unordered_map<string,vector<string>>mp;
        // 遍历输入的字符串向量
        for(string s : strs)
        {
            // 生成当前字符串的字母频率编码
            string key = countStr(s);
            // 将当前字符串添加到对应字母频率编码的组中
            mp[key].push_back(s);
        }
        vector<vector<string>>res;
        for(auto pair : mp)
        {
            // 遍历unordered_map,将每个分组添加到结果向量中
            res.push_back(pair.second);
        }

        return res;
    }

    // 此函数用于生成字符串的字母频率编码
    string countStr(string s){
        string res = "";
        int count[26] = {0};// 创建一个计数数组,用于记录每个字母的出现次数
        // 遍历字符串,统计每个字母的出现次数
        for(int i=0;i<s.length();i++)
        {
            count[s[i]-'a']++;
        }
        // 将计数数组的每个元素转换为字符串,并添加到结果字符串中
        for(int i=0;i<26;i++)
        {
            res+=to_string(count[i])+"#";
        }
        return res;
    }
};

标签:存储,string,strs,异位,字母,热题,字符串,100,LeetCode
From: https://blog.csdn.net/qq_56374728/article/details/139844678

相关文章

  • 2024华为OD机试真题- 计算三叉搜索树的高度-(C++/Java/Python)-C卷D卷-100分
     2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述定义构造三叉搜索树规则如下:每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的规则是:1.如果数小于节点的数减去500,则将数插入节点的左子树2.如果数大于节点的......
  • 【LeetCode】215.数组中的第K个最大元素
    题目描述给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。示例1:输入:[3,2,1,5,6,4],k=2输出:5示例2:输入:[3,2......
  • EyeLink 1000 plus(桌面式)眼动仪使用指导
    一、简介眼动追踪是测量眼睛运行的过程。眼动追踪研究的最关注的事件是确定人类或者动物看的地方(比如:“注视点”或“凝视点”)。更准确来说是通过仪器设备进行图像处理技术,定位瞳孔位置,获取坐标,并通过一定的算法,计算眼睛注视或者凝视的点,让计算机知道你正在看哪里,何时看的,为什么看......
  • LeetCode 热题100 --哈希
    哈希哈希,有限空间映射一个无限的空间。在空间内,有序化进行快速查询。用空间换时间。1.两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数......
  • 直流电压线性可调高压升压电源模块0-1000V/0-800v/0-600v/0-500v/0-400v/0-300v/0-200
    特点效率高达75%以上1*2英寸标准封装单电压输出可直接焊在PCB上工作温度:-40℃~+75℃阻燃封装,满足UL94-V0要求温度特性好电压控制输出,输出电压随控制电压线性变化应用GRB系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为:4.5~9V、9~18V、18~36V及36......
  • leetcode 动态规划 (基础版)打家劫舍
    题意:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ......
  • leetcode 动态规划(基础版)删除并获得点数
    题目:给你一个整数数组  ,你可以对它进行一些操作。nums每次操作中,选择任意一个  ,删除它并获得  的点数。之后,你必须删除 所有 等于  和  的元素。nums[i]nums[i]nums[i]-1nums[i]+1开始你拥有 个点数。返回你能通过这些操作获得的最大点数。0题解:要会理解......
  • leetcode225用队列实现栈
    本文主要讲解用队列实现栈的要点与细节,按照步骤思考更方便理解,同类型用栈实现队列c++与java代码如下,末尾请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:voidpush(intx) 将元素x压入栈顶。intp......
  • 【华为OD】D卷真题100分:IPv4地址转换成整数 Java代码实现
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、python、java、C、C++代码实现:【华为OD】D卷真题100分:IPv4地址转换成整数JavaScript代码实现-CSDN博......
  • 【华为OD】D卷真题100分:IPv4地址转换成整数 python代码实现
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、python、java、C、C++代码实现:【华为OD】D卷真题100分:IPv4地址转换成整数JavaScript代码实现-CSDN博......