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

news2024/11/28 9:35:13

目录

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/620487.html

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

相关文章

15. 算法之排序算法

前言 排序是在软件开发中经常遇到的需求。比如基于订单的创建时间倒排&#xff0c;基于金额大小排序等等&#xff0c;那么这些排序底层是怎么写的呢&#xff0c;本节&#xff0c;我们就常用排序算法展开介绍。 1. 冒泡排序 1.1 算法思想 冒泡排序是最基础的排序算法。冒泡排…

HashMap 的底层原理和源码分析

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; 文章目录 一、HashMap…

【迷宫】地下迷宫游戏-微信小程序开发流程详解

可曾记得&#xff0c;小时候上学路边买的透明铅笔盒&#xff0c;里面内嵌了一个小球&#xff0c;它用重力可从起点滚动到终点&#xff0c;对小朋友来说是感觉有趣的&#xff0c;在这个游戏的基础上&#xff0c;弄一款微信小程序的迷宫探索游戏试试&#xff0c;在不同关卡的迷宫…

14 【Vuex】

1.理解 Vuex 1.1 Vuex 是什么 概念&#xff1a;专门在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用…

基于RK3399+FPGA的地面测试台多参数数据记录仪方案(一)软件设计及测试

完成了测试台软件分析和编程环境搭建后&#xff0c;接下来就是软件的编写。本章主要包括 软件窗口界面设计和功能代码实现。以某型号数据记录仪的工作需求为目标&#xff0c;根据测试 工作流程&#xff0c;以 Linux-Qt 为主要开发手段&#xff0c;设计一款功能完备、界面友…

Java8 Stream详解及结束操作方法使用示例(三)

结束操作是指结束 Stream 该如何处理的操作&#xff0c;并且会触发 Stream 的执行。下面是一些常用的结束操作方法。结束操作会对数据源进行遍历&#xff0c;因此是及早求值的。 Java8 Stream详解及中间操作方法使用示例&#xff08;一&#xff09; ​​​​​​​Java8 Strea…

三种经典博弈(取石子问题)

三种经典博弈 巴什博奕威佐夫博奕尼姆博奕 博弈是有一种很有意思的游戏&#xff0c;就是有物体若干堆&#xff0c;可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干&#xff0c;规定最后取光物体者取胜。这是我国民间很古老的一个游戏&#xff0c;别看这游戏极其简…

一体化协同平台助力企业回归生产本质,创造价值

核心观点 单点工具的串联无法有效解决研效痛点问题&#xff0c;企业需要通过一体化协同平台提高端到端价值流动效率。一体化协同平台的价值是软件工程理念最大化落地、数字化研发管理、沉浸式研发体验。一体化协同平台集成需要评估闭环效率杠杆&#xff0c;确定集成边界和集成…

什么是关系模型? 关系模型的基本概念

关系模型由IBM公司研究员Edgar Frank Codd于1970年发表的论文中提出&#xff0c;经过多年的发展&#xff0c;已经成为目前最常用、最重要的模型之一。 在关系模型中有一些基本的概念&#xff0c;具体如下。 (1)关系(Relation)。关系一词与数学领域有关&#xff0c;它是集合基…

TensorRT 从7.2升级到8.5,改写plugin以适配新版本

前言 TensorRT是NVIDIA推出的一款高效深度学习模型推理框架&#xff0c;其包括了深度学习推理优化器和运行时&#xff0c;能够让深度学习推理应用拥有低时延和高吞吐的优点。 TensorRT的版本迭代速度非常快&#xff0c;很多之前写的plugin在版本升级后可能就没法直接使用&…

广州虚拟动力携数字人交互技术产品参展第十九届深圳文博会

2023年6月7-11日 深圳国际会展中心 第十九届深圳文博会正式举办&#xff01; 广州虚拟动力携数字人交互技术产品参展 诚邀您莅临粤港澳大湾区馆&#xff08;11号馆&#xff09; 广东参展团展位参观交流 数字技术&#xff0c;引领文化产业新发展 中国文化及相关文化产业的…

【Apache Pinot】Controller、Broker 和 Server 的概念和工作流程

背景 笔者最近一段时间使用 Apache Pinot 比较多&#xff0c;发现目前国内使用 Pinot 的很少&#xff0c;所以跟他相关的资料也比较少&#xff0c;本人在扩容&#xff0c;升级&#xff0c;部署&#xff0c;查询等方面操作有些许经验&#xff0c;知道其中有很多细节需要注意和规…

北邮22信通:实验七 三角波-方波(锯齿波-矩形波)发生器实验报告(着急验收的同学先看看,后续细节正在赶来中)

北邮22信通一枚~ 持续更新模电实验讲解 关注作者&#xff0c;解锁更多邮苑模电实验报告~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22信通——电子电路_青山如墨雨如画的博客-CSDN博客 实验七 三角波-方波&#xff08;锯齿波-矩形波&#xff09;发生器实验…

数据结构——树的概念、二叉树的概念

文章目录 引言1.树的概念1.1.树的其他相关概念 2.树的代码实现的结构2.1.树形结构的应用 3.二叉树的概念3.1.特殊二叉树的概念3.1.1.完全二叉树3.1.2.满二叉树 3.2.二叉树试题讲解3.2.1.试题一3.2.2.试题二3.2.3.试题三 4.二叉树的存储结构4.1.顺序结构存储4.2.链式结构存储 引…

重温经典:简读光干涉、衍射原理

如果您不是光学专业的&#xff0c;或者是文科生&#xff0c;那么您想到光的干涉和衍射第一反应应该是很多公式对不对&#xff1f;头好大是不是&#xff1f;好&#xff0c;那么今天我们就不用一个公式来重新解读光的干涉和衍射。 光&#xff0c;也叫电磁波&#xff0c;他的表现…

java并发编程:Java线程池详解

文章目录 为什么要用线程池线程池的原理ThreadPoolExecutor提供的构造方法ThreadPoolExecutor的策略线程池主要的任务处理流程ThreadPoolExecutor如何做到线程复用的&#xff1f; 四种常见的线程池newCachedThreadPoolnewFixedThreadPoolnewSingleThreadExecutornewScheduledTh…

web3.js获取导入

我们访问 https://github.com/ 我们搜索 web3.js 然后我们直接点击第一个进去 进入之后 往下拉 你会看到 它支持node项目的两种引入方式 这里 大家可以直接下载我的资源 https://download.csdn.net/download/weixin_45966674/87878737 下载好解压出来就会有一个 web3.min.js…

C#读写EM4205/4305/4469卡复制ID卡制做FDX-B动物标签源码

EM4305/EM4205卡是采用瑞士EM微电子公司工作频率为125kHz&#xff0c;具有读、写功能的非接触式RFID射频芯片&#xff0c;它具有功耗低、可提供多种数据传输速率和数据编码方法等特点&#xff0c;适合射频芯片ISO 11784/11785规范&#xff0c;该芯片被广泛应用于动物识别和跟踪…

《C++高级编程》读书笔记(五、六:面向对象设计设计可重用代码)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. 过程化的思考方式 过程语言&#xff08;例如 C&#xff09;将…

玄奘文旅集团主办学习强企玄奘之路戈壁挑战赛在敦煌圆满完赛!

“学习改变命运&#xff0c;强企复兴中国”&#xff0c;2023年4月16日-20日&#xff0c;由玄奘文旅集团主办的“第23届26届学习强企玄奘之路戈壁挑战赛&#xff08;联赛&#xff09;”在千年古城敦煌圆满落幕&#xff01; 这是商界各行业的一次跨界融合&#xff0c;也是疫情过…