【力扣刷题 | 第三天】242.有效字母异位词 349 两个数组的交集

news2025/1/31 14:58:29

目录

1.242. 有效的字母异位词

2.349. 两个数组的交集 - 力扣(LeetCode)​​​​​​

使用算法笔记:

总结:


1.242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

 解法1:暴力排序:
我们可以建立两个multiset容器分别存储这两个字符串的ascell码值。由于multiset容器的排序性质,我们就可以对两个容器进行逐步对比,如果值不相同就报错:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.size() != t.size()) {
            return false;
        }
        multiset<char> s1(s.begin(), s.end()); 
        multiset<char> t1(t.begin(), t.end());
        return s1 == t1; 
    }
};

解法2:哈希表:
建立一个vector容器,我们用下标来反映字母,用值来反映字母出现的次数,那么我们先遍历s字符串 进行操作d3[s[i]-97]++;,此时vector容器中不同下标处就会有不同的值,然后我们再遍历t字符串 进行操作:d3[t[i]-97]--;,此时如果字符串s与字符串t是字母异位词,在s中加的值一定会在t中减去,遍历容器一定值都是0,反之则说明这两个不是字母异位词。

class Solution {
public:
    bool isAnagram(string s, string t) {
       auto a=s.size();
       auto b=t.size();

       if(a!=b)
       {
           return false;
       }
       vector<int>d3(26,0);
      for(int i=0; i<a; i++)
    {
        d3[s[i]-97]++;
         d3[t[i]-97]--;
    }
       for(int i=0;i<26;i++)
       {
           if(d3[i]!=0)
           {
               return false;
           }
       }
       return true;
    }
};

简化版本:

class Solution {
public:
    bool isAnagram(string s, string t) { // 定义函数 isAnagram,入参为 s 和 t 两个字符串,返回值为布尔型,表示 s 和 t 是否为异位词
        if (s.size() != t.size()) {  // 如果 s 和 t 的长度不相等,那么它们一定不是异位词
            return false;   // 直接返回 false 
        }
        unordered_map<char, int> freq; // 定义一个哈希表,统计 s 中各个字符出现的次数
        for (char c : s) {  // 遍历字符串 s 中的每一个字符
            ++freq[c];  // 将字符 c 对应的值加 1
        }
        for (char c : t) {  // 遍历字符串 t 中的每一个字符
            if (--freq[c] < 0) {  // 对应字符的值减 1,如果减完后小于 0,说明 t 中出现了 s 中没有的字符,即不是异位词
                return false;  // 直接返回 false
            }
        }
        return true;  // 如果能够顺利通过上述两个循环,说明 s 和 t 是异位词,返回 true
    }
};

2.349. 两个数组的交集 - 力扣(LeetCode)​​​​​​

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

 1.调用STL算法中的交集算法:set_intersection  容器交集(这里不能通过力扣,因为力扣不要求结果去重,而我们的交集算法会自己去重,因此不能使用,在这里只是作为一种思路分享给大家,了解更多C++算法的便洁)

文章链接:C++ 常见集合算法_我是一盘牛肉的博客-CSDN博客

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());

        // 使用 set 容器进行去重
        set<int> intersect_set;
        set_intersection(nums1.begin(), nums1.end(), nums2.begin(), nums2.end(), inserter(intersect_set, intersect_set.begin()));

        // 将 set 转换为 vector 并返回
        vector<int> intersect_vec(intersect_set.begin(), intersect_set.end());
        return intersect_vec;
    }
};

使用算法笔记:

1.inserter是 STL 中的一个函数模板,其作用是将元素插入到容器的指定位置。

inserter接受两个参数:第一个参数是容器对象,第二个参数是要插入到容器中的位置迭代器。当元素插入到容器中时,它们会被插入到指定位置前面,也就是说,如果我们使用 inserter(c, c.end()),那么元素就会被插入到容器的末尾。

2.back_inserter是另一个 STL 迭代器适配器,与 inserter 不同,它会使用 push_back 函数向容器的末尾插入元素。

在本例中,使用 back_inserter 类似 inserter,我们需要将插入元素放入 set 容器中。但是,使用back_inserter可以更简洁地实现这个过程,而不需要指定插入位置的迭代器。

3.set_intersection是交集算法,会自动计算已经排序好的两个容器之间的交集。

总结:

c++为我们提供了大量已经内置好的算法模板以及函数模板,我们如果可以掌握这些模板,就可以更加高效和快速的解决算法问题。

感谢关注,本人会持续更新力扣解法。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/631654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习记录 -- Accurate and fast cell marker gene identification with COSG

文章目录 brief代码演示安装实操 个人感受 brief 单细胞数据分析当中&#xff0c;细胞聚类分群完成之后&#xff0c;我们希望得知每一个细胞类群是什么细胞&#xff0c;也就是细胞类型注释。 通常情况下&#xff0c;我们可以找到细胞类群间表达量存在差异的基因&#xff0c;我…

爆款视频生成器-视频批量剪辑系统源码开发分享

创建视频 该接口用于创建抖音视频&#xff08;支持话题, 小程序等功能&#xff09;。该接口适用于抖音。 使用限制 抖音的 OAuth API 以https://open.douyin.com/ 开头。挂载小程序请先完成注册开发者平台账号。创建抖音视频后, 会有一个审核过程, 期间只有自己可见。如果发…

【C/C++】带你快速掌握 使用—增强for(范围for循环)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Cefsharp-Winform114.2.100(5735)最新版本体验

版本说明: 官方仓库最新版本体验,114.2.100 (分支5735),支持MP3,WEBGL,不支持H264 视频体验H264参阅109版本(CSDN中搜索) Cefsharp109.1.110(winfrom)最新支持H264-MP3-MP4功能体验,导出pdf和下载方法有变调整_cef h264_久爱物联网的博客-CSDN博客 效果预览: 一…

LinuxC编程——高级文件操作

目录 一、查询文件信息1、stat2、stat fstat lstat区别 二、目录操作2.1 opendir2.2 readdir2.3 closedir例练习&#xff1a;实现ls操作 三、库3.1 库的定义3.2 库的分类3.2.1 静态库3.2.2 动态库 3.3 创建库3.3.1 静态库制作3.3.2 动态库制作 一、查询文件信息 1、stat int …

TLD7002学习笔记(二)-使用S32K144驱动TLD7002

文章目录 1. 前言2. 评估板简介3. 官方驱动3.1 官网驱动的介绍3.2 官方驱动的移植3.3 官方驱动的使用 4. 参考资料 1. 前言 本篇文章是TLD7002学习笔记的第二篇&#xff0c;主要是介绍如何使用S32K144驱动TLD7002-16ES。为此&#xff0c;笔者做了一套基于TLD7002-16ES的评估板…

重学Java的第一章

1.写在前面 今年的行情很差&#xff0c;差到很多人都没有办法找到工作&#xff0c;博主也是一个菜逼&#xff0c;找了一家小破公司&#xff0c;导致我那段时间很迷茫&#xff0c;也是也很焦虑&#xff0c;思考了很多&#xff0c;觉得我自己学的已经够多了&#xff0c;但是每一…

《Lua程序设计》--学习7

数据结构 数组 矩阵和多维数组 不规则数组&#xff1a;数组的数组&#xff0c;也就是所有元素均是另一个表的表 将两个索引合并为一个&#xff1a;声明一个长数组&#xff0c;然后根据 行数*行所拥有的元素个数列数来访问这样 链表 因为表是动态对象&#xff0c;所以在Lua语…

4.7 wait notify - 4.11 多把锁

目录 4.7 wait notify1、为什么需要wait2、原理之wait/notify3、API的介绍 4.8 wait notify 的正确姿势4.9 Park & Unpark4.10 重新理解线程状态转换4.11 多把锁 4.7 wait notify 1、为什么需要wait 当持有锁的线程因为某种条件不能满足不能执行时&#xff0c;由于其持有…

usb的传输类型

usb的传输类型 usb的四种传输类型: 批量传输同步传输(或等时传输)中断传输控制传输 其中的批量,同步,中断,三种传输中,每完整传输一次数据都称做一个事务(主要的数据传输是靠这三种传输) 事务的具体表现(批量,同步,中断) ​ 上图说说的输入事务是以主机来说的, 主机需要先发…

EMC学习笔记(三)滤波

滤波 1.概述2.滤波器件2.1 电阻2.2 电感2.3 电容2.4 铁氧体磁珠2.5 共模电感 3.滤波电路3.1 滤波电路的形式3.2 滤波电路的布局与布线 4.电容在PCB的EMC设计中的应用4.1 滤波电容的种类4.2 电容自谐振问题4.3 ESR对并联电容幅频特性的影响4.4 ESL对并联电容幅频特性的影响4.5 电…

JVM原理:JVM运行时内存模型(通俗易懂)

目录 前言正文虚拟机栈局部变量表操作数栈动态链接方法返回地址 本地方法栈本地方法存在的意义本地方法的调用 虚拟机堆堆结构Eden区Survivor区域老年代Old区常用参数指令 方法区常量池 运行时常量池方法信息类信息域信息JDK1.7前的方法区JDK1.7时的方法区JDK1.7后的方法区 程序…

Spring-2

DI 依赖注入 所谓依赖注入&#xff0c;是指程序运行过程中&#xff0c;如果需要调用另一个对象协助时&#xff0c;无须在代码中创建被调用者&#xff0c;而是依赖于外部的注入<bean id”” class”” p:属性名称-ref”另外受管 bean 的名称”/> IoC 实际上有 2 种实现 …

探索Python工具库合集:提高开发效率的秘密武器

前言&#x1f680;&#x1f680; 在开发过程中&#xff0c;笔者积累了许多实用的Python工具函数和模块&#xff0c;决定将它们整理成一个工具库集合&#xff0c;并与大家分享。本文将介绍笔者的Python工具库集合的核心功能和用途&#xff0c; 在日常的Python开发中&#xff0c;…

Selenium Python教程第6章:使用页面对象

6. Page Objects 页面对象 6.1 什么是页面对象模型(POM)&#xff1f; 页面对象模型(Page Objects Model, POM )是一组旨在表示一个或多个网页的类, 用1个类来保存1个网页上所有的元素&#xff0c;相似的网页可以重用此类。 1个网站通常有多个页面&#xff0c;可以用多个页面类…

(opencv)图像几何变换——缩放

图像缩放是指将图像的尺寸变小或变大的过程&#xff0c;也就是减少或增加源图像数据的像素个数。图像缩放一定程度上会造成信息的丢失&#xff0c;因此需要考虑适宜的方法进行操作。 下面介绍两种常用的图像缩放方法的原理及实现 1.基于等间隔提取图像缩放 等间隔提取图像缩…

多线程目录

基础概念篇 001线程状态图示_存在,及合理的博客-CSDN博客例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容。提示&#xff1a;以下是本篇文章正文内容&…

机器学习 day16(前向传播算法,Tensorflow的实现代码)

1. 手写数字识别的神经网络模型 为简单起见&#xff0c;仅区分手写0和1&#xff0c;并用8*8的像素矩阵&#xff0c;共有64个像素&#xff08;特征&#xff09;&#xff0c;展开写成向量x&#xff0c;即该神经网络模型的输入特征向量x的维数为64&#xff0c;设该模型有两层隐藏…

一文打通:从字节码指令的角度解读前置后置自增自减(加加++减减--)

文章目录 1.前置了解的知识1.1 栈这种数据结构1.2 局部变量表和操作数栈1.3 三个字节码指令 2.单独使用后置与前置2.1 后置字节码指令2.2 前置字节码指令2.3 总结 3.需要返回值的情况下使用后置与前置3.1 后置字节码指令3.2 前置字节码指令3.3 总结3.4 练习&#x1f340; 练习一…

npm i安装依赖包报错proxy‘ config is set properly. See: ‘npm help config‘

npm i 报错proxy‘ config is set properly. See: ‘npm help config‘ 网上搜了解决方法&#xff1a; https://blog.csdn.net/zz00008888/article/details/127852233 但是执行完还是报错&#xff0c;查代理已经是false了 看到是cnpm镜像&#xff0c;于是用cnpm i 就运行成功…