首页 > 其他分享 >力扣学习笔记——49. 字母异位词分组

力扣学习笔记——49. 字母异位词分组

时间:2023-10-29 13:06:53浏览次数:40  
标签:std sort include nums int 异位 49 力扣 排序


49. 字母异位词分组

https://leetcode.cn/problems/group-anagrams/?envType=study-plan-v2&envId=top-100-liked 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

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

示例 1:

输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:

输入: strs = [“”]
输出: [[“”]]
示例 3:

输入: strs = [“a”]
输出: [[“a”]]

这个首先是排序,排序后用哈希表将结果和排序的字符串作为键对应起来

知识点

C++ 排序的库函数使用

在 C++ 中,你可以使用 头文件中的库函数来进行排序。以下是一些常用的排序函数:

std::sort():对容器或指定范围内的元素进行排序,默认按升序排序。注意:std::sort(),不光能对数字进行排序,还可以对字母进行排序。

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};

    std::sort(nums.begin(), nums.end());

    // 输出排序后的结果
    for (const auto& num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

输出结果:1 2 5 8 9

std::stable_sort():与 std::sort() 类似,但保持相等元素的相对顺序不变。

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};

    std::stable_sort(nums.begin(), nums.end());

    // 输出排序后的结果
    for (const auto& num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

输出结果:1 2 5 8 9

自定义排序:你还可以使用自定义的比较函数来进行排序,例如按照特定的条件进行排序。

#include <algorithm>
#include <vector>

bool customCompare(int a, int b) {
    // 自定义排序规则:按照奇偶性进行排序
    if (a % 2 == 0 && b % 2 != 0) {
        return false;  // a 在 b 前面
    } else if (a % 2 != 0 && b % 2 == 0) {
        return true;   // a 在 b 后面
    } else {
        return a < b;  // 其他情况按照升序排序
    }
}

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};

    std::sort(nums.begin(), nums.end(), customCompare);

    // 输出排序后的结果
    for (const auto& num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

输出结果:1 5 9 2 8

这些是一些常用的排序函数和用法。你可以根据实际需求选择适合的排序函数,并根据需要编写自定义的比较函数

如何用for循环如何拿到std::unordered_map的键和值

如果你想使用 for 循环来获取 std::unordered_map 的键和值,你可以使用迭代器来遍历容器。每个迭代器指向一个键值对,你可以通过解引用迭代器来获取键和值。

以下是一个示例代码,展示了如何使用 for 循环遍历 std::unordered_map 并获取键和值:

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, std::string> myMap = {{1, "apple"}, {2, "banana"}, {3, "orange"}};

    // 遍历 unordered_map
    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        int key = it->first;
        std::string value = it->second;
        std::cout << "Key: " << key << ", Value: " << value << std::endl;
    }
    return 0;
}

在上面的示例中,我们使用 auto 关键字来推导出迭代器的类型。然后,使用 begin() 函数获取指向第一个键值对的迭代器,使用 end() 函数获取指向最后一个键值对之后位置的迭代器。在循环中,通过解引用迭代器来获取当前键值对的键和值。

输出结果将是:

Key: 1, Value: apple
Key: 2, Value: banana
Key: 3, Value: orange

你可以根据实际需要修改键和值的类型,并在循环中执行适当的操作


标签:std,sort,include,nums,int,异位,49,力扣,排序
From: https://blog.51cto.com/u_15316847/8079858

相关文章

  • 力扣2558.从数量最多的堆取走礼物
    给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作:选择礼物数量最多的那一堆。如果不止一堆都符合礼物数量最多,从中选择任一堆即可。选中的那一堆留下平方根数量的礼物(向下取整),取走其他的礼物。返回在 k 秒后剩下的礼物数量。 示例1:输入:gifts......
  • 力扣1444.切割后面积最大的蛋糕(贪心)
    矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中: horizontalCuts[i] 是从矩形蛋糕顶部到第  i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离请你按数组 horizontalCuts 和 verticalCuts......
  • PAT_A1049 Counting Ones【困难】
    Thetaskissimple:givenanypositiveinteger N,youaresupposedtocountthetotalnumberof1'sinthedecimalformoftheintegersfrom1to N.Forexample,given N being12,therearefive1'sin1,10,11,and12.InputSpecification:Eac......
  • 【洛谷 8649】 [蓝桥杯 2017 省 B] k 倍区间
    题目描述给定一个长度为 �N 的数列,�1,�2,⋯��A1​,A2​,⋯AN​,如果其中一段连续的子序列 ��,��+1,⋯��(�≤�)Ai​,Ai+1​,⋯Aj​(i≤j) 之和是 �K 的倍数,我们就称这个区间 [�,�][i,j] 是 �K 倍区间。你能求出数列中总共有多少个 �K 倍区间吗?输入格式第一行包含两个整数 �N 和 �K......
  • Day59 | 力扣695:岛屿的最大面积
    力扣链接写在前面这道题和200.岛屿数量很像,只不过200.岛屿数量是求岛屿总个数,这道题是求最大的岛屿面积,基本代码逻辑是一样的,只不过具体处理细节有一点不一样思路在主函数maxAreaOfIsland中遍历,遇到岛屿temp就计数为1,然后进入dfs函数,每次遍历到一个岛屿,temp就加1,用变量tem......
  • 你是不是瞧不起力扣
    leetcode「10·24」程序员节编程竞赛计算子集给你三个整数\(n,k,m\)。定义\(S=\{i\mid1\lei\lenm+k,i\in\mathbbZ\}\)请返回一个下标从\(0\)开始、长度为\(m\)的数组answer,其中answer[i]表示符合下列条件集合\(T\)的个数。集合\(T\)是集合\(S\)的子集......
  • 力扣每日一题+python知识点回顾(六)
    力扣题目:老人的数目(题号:2678)给你一个下标从0开始的字符串details。details中每个元素都是一位乘客的信息,信息用长度为15的字符串表示,表示方式如下:前十个字符是乘客的手机号码。接下来的一个字符是乘客的性别。接下来两个字符是乘客的年龄。最后两个字符是乘客的座位......
  • 力扣每日一题+python知识点回顾(五)
    力扣题目:做菜顺序(题号:1402)一个厨师收集了他n道菜的满意程度satisfaction,这个厨师做出每道菜的时间都是1单位时间。一道菜的「like-time系数」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是time[i]*satisfaction[i]。返回厨师在准备了一......
  • 力扣每日一题+python知识点回顾(四)
    力扣题目:统计无向图中无法互相到达点对数(题号:2316)给你一个整数n,表示一张无向图中有n个节点,编号为0到n-1。同时给你一个二维整数数组edges,其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边。请你返回无法互相到达的不同点对数目。示例一:输入:n=3,edges=[[0,1],[0,2......
  • 242. 有效的字母异位词
    目录题目法一、字典题目给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若 s和t 中每个字符出现的次数都相同,则称 s和t 互为字母异位词。示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="car"......