字母异位词分组-力扣热题100道

字母异位词分组

49. 字母异位词分组

中等

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

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

示例 1:

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

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

示例 2:

输入: strs = [""]

输出: [[""]]

示例 3:

输入: strs = ["a"]

输出: [["a"]]


解题思路

方法一:排序+哈希表

因为字母异位词的特点是 同为字母异位词的字符串所有的字母都相同,只是顺序不同。则按字母顺序后的字符串相同

  • 1.把所有字符串按照字母顺序排序,则所有为一组的字母异位词的字符串是一样的
  • 2.把排序后的字符串为键,把对应的没有排序的字符串作为值。则一个键下的值为以这个键的字符串中的字母组成的多个或一个字符串
  • 把哈希表中的值:同组字母组成的字符串 放入 结果中
  • 输出结果
c 复制代码
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {

    unordered_map<string,vector<string>>str2;
    //定义一个哈希表,键=按字母顺序排好序的字符串,值=同为异位词的字符串
    for(string str:strs){
    //遍历strs中的每一个字符串,把每次遍历的字符串放到str中
        string tempstr=str;
        //把字符串给到tempstr
        sort(tempstr.begin(),tempstr.end());
        //对当前遍历到的字符串排序,sort函数用来排序,范围是从tempstr的开始(begin)到tempstr的结束
        str2[tempstr].push_back(str);
        //在str2的哈希表中找键为排序后的tempstr的向量,如果没有找到则在哈希表中新建一个键为tempstr的元素,值为空的string向量。
        //push_back把没有排序的str放入以tempstr为键的向量末尾做值
    }
    vector<vector<string>> res;
    //输出结果,由输出示例可以看出 结果为 一组由字符串向量组成的向量,所以定义一个由字符串向量组成的向量变量 res
    for(auto[_,strVec]:str2){
    //auto表示这个向量的类型为auto,[_,strVec]表示一个键值对,_在键的位置,表示我们不关注键,strVec提取对应的值,遍历str2中的每一个键值对
        res.push_back(strVec);
        //strVec对应的是同为字母异位词的多个或一个字符串,把每一个strVec放到res结果向量的后面
    }
    return res;//返回结果向量
    }
};

c 复制代码
补充:
在C++中,for(string str:strs)表示遍历strs中的字符串
- for表示循环
- string str:定义了一个类型为string的str变量,用来存储每次遍历的字符串
- strs: 被遍历的字符串,在这里是传入参数的strs

push_back()是vetor中的成员函数,把传入的参数放到指定的向量后面

我原本自己的思路:

1.按顺序取strs中的没有访问过的字符串,新建一个哈希表,设置访问数组

2.把取出来的字符串的每个字母转成ASCII码值作为存储在哈希表中的下标,出现一次哈希表中+1

3.取strs中在这个字符串后面的字符串

4.遍历哈希表,当不等于1处,把下标转成ASCII看取的后面字符串中是否有这个字母

如果其中一处不等于1的字母没有,则break,找下一个字符串

如果所有不等于1的下标对应的字母都有,则把这个字符串跟一开始取出来的字符串放一起,把这个字符串的访问数组下标设为1

5.继续找下一个没有被访问过的字符串,重复4的操作,一直找到strs中的字符串结束

注意:

没有利用字母异位词的 同组字母相同的特点。

  • 如果有 由相同元素组成的,可以先排序把他们变成相同的,再进行操作
相关推荐
聚客AI15 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v17 小时前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工19 小时前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农21 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了21 小时前
AcWing学习——双指针算法
c++·算法
moonlifesudo21 小时前
322:零钱兑换(三种方法)
算法
NAGNIP2 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队2 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja2 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法