代码随想录算法训练营第六天(一)|242.有效的字母异位词

news2024/12/28 5:54:11

LeetCode 242 有效的字母异位词

题目:

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

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

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

思路:

首先需要理解字母异位词的含义,简单理解为:两字符串的长度相同,字母相同,但顺序不同。
字母异位词简意为两字符串长度相同,字母相同,顺序不同。如果是异位词那么输出true,否则就输出false。

首先我的想法是:第一步判断两个字符串的长度是否相等,其次,分别统计每一个字母出现的次数,在进行比较。如果都一样,那么输出true,否则false。

既然提示说,只会出现小写字母,那我们不妨用一个大小为27的数组来统计对应的字母出现的次数,已知小写英文字母的ASCII范围为97-122,那么分别对应1-26的下标数组。

初始化这个数组全为0,当第一个统计第一个字符串的时候,我们采用自增,统计第二个字符串的时候,我们采用自减。是异位词的话,那么说明它最后会回到初始状态,如果出现其他情况,比如-1,或者加和不为0,那么false。

上代码!

class Solution {
public:
    bool isAnagram(string s, string t) {

        int nums = s.size();
        int numt = t.size();
        if (nums != numt) {
            return false;
        }

        int a[27] = { 0 };

        for (int i = 0; i < nums; i++) {
            a[s[i] - 97]++;
        }

        for (int i = 0; i < numt; i++) {
            a[t[i] - 97]--;
        }
        int sum = 0;
        for (int i = 0; i < 27; i++) {
            sum += a[i];


            if (a[i] < 0) {
                return false;
            }
            else if (sum != 0) {
                return false;
            }



        }

        return true;

    }
};

这代码,够垃圾,也够直接!


LeetCode 349 两个数组的交集

题目:

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

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

思路:

首先,题目要求我们交到两个数组的交集部分,并且返回交集的元素只能是唯一的,就是不重复的意思。

那么我们第一步应该先把两个数组中相同的部分找出来,然后再进行一次遍历,删除相同元素就可以返回结果了。

具体怎么做呢?

用数组a记录数组nums1中每个元素出现的次数,再统计数组nums2每一项出现的次数,做好标记,输出交集即可。

上代码!

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

		int len1 = nums1.size();
		int len2 = nums2.size();

		int a[10] = { 0 };
		int b[10] = { 0 };

		for (int i = 0; i < len1; i++) {
			a[nums1[i]]++;
		}
		for (int i = 0; i < len2; i++) {
			if (a[nums2[i]] != 0) { 
				b[nums2[i]] = 1;
			}
		}
		
		vector<int> ss;

		for (int i = 0; i < 10; i++) {
			if (b[i] != 0) {
				ss.push_back(i);//由于是容器的返回,用push_back传值
			}
		}

		return ss;
    }
};

你以为这就完了吗,LeetCode真恶心,你告诉我这是个什么东西。

改呗,还能怎么办!

好好好,加到1000还不够,是我保守了。

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

		int len1 = nums1.size();
		int len2 = nums2.size();

		int a[9999] = { 0 };
		int b[9999] = { 0 };

		for (int i = 0; i < len1; i++) {
			a[nums1[i]]++;
		}
		for (int i = 0; i < len2; i++) {
			if (a[nums2[i]] != 0) { 
				b[nums2[i]] = 1;
			}
		}
		
		vector<int> ss;

		for (int i = 0; i < 9999; i++) {
			if (b[i] != 0) {
				ss.push_back(i);//由于是容器的返回,用push_back传值
			}
		}

		return ss;
    }
};

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

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

相关文章

韦东山嵌入式linux系列-mmap

应用程序和驱动程序之间传递数据时&#xff0c;可以通过read、 write函数进行。这涉及在用户态 buffer 和内核态 buffer 之间传数据&#xff0c;如下图所示 应用程序不能直接读写驱动程序中的buffer&#xff0c;需要在用户态 buffer 和内核态 buffer 之间进行一次数据拷贝。这种…

6.1.面向对象技术-面向对象相关概念

基本概念 对象&#xff1a;基本的运行实体&#xff0c;为类的实例&#xff0c;封装了数据和行为的整体(数据和行为就是属性和方法)&#xff0c;如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。 学生有张三、李四等。张三就是具体的个体&#xf…

Java哈希算法

哈希算法 哈希算法1.概述2.哈希碰撞3.常用的哈希算法4.哈希算法的用途4.1校验下载文件4.2存储用户密码MD5加密5.SHA-1加密小结&#xff1a; 哈希算法 1.概述 哈希算法&#xff08;Hash&#xff09;又称摘要算法&#xff08;Digest&#xff09;&#xff0c;它的作用是&#xf…

OrangePi AIpro学习3 —— vscode开发昇腾DVPP程序

目录 一、VScode配置 1.1 下载和安装 1.2 安装和配置需要的插件 二、构建项目 2.1 项目架构 2.2 解决代码高亮显示 2.3 测试编译 2.4 总结出最简单的代码 2.5 vscode报错找不到头文件解决方法 三、代码简单讲解 3.1 初始化部分 3.2 拷贝数据到NPU显存中 3.3 准备裁…

Leetcode每日一题之仅仅反转字母(C++)

在学习之余对于知识的巩固也尤为重要&#xff0c;不论难度高低&#xff0c;都会对代码的理解有所加深&#xff0c;下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的&#xff0c;这里用到的知识就是关于 s…

【数据结构与算法 | 二叉树篇】AVL树

1. 前言 AVL树是一种自平衡的二叉搜索树。为什么会出现AVL树。众所周知&#xff0c;虽然普通的二叉搜索树的平均时间复杂度为O(logn)&#xff0c;但最差的情况的时间复杂度为O(n)。为了避免最差的这种情况&#xff0c;出现了AVL树。 我们规定&#xff1a;如果树有个节点它的左…

大模型LLM——微调的七种方法

大模型的七种微调方法 文章目录 大模型的七种微调方法1. LoRA2. QLoRA3. 适配器调整4. 前缀调整5. 提示调整6. P-Tuning7. P-Tuning v2 1. LoRA LoRA的主要步骤包括&#xff1a; 选择微调目标权重矩阵&#xff1a;首先在大型模型&#xff08;如GPT&#xff09;中识别需要微调…

学习vue3 五,传送,缓存组件以及过渡和过渡列表

目录 Teleport传送组件 keep-alive缓存组件 transition动画组件 1. 过渡的类名 2. 自定义过渡class名 3. transition的生命周期 4.appear transition-group 1. 过渡列表 2. 列表的移动过渡 3. 状态过渡 Teleport传送组件 Teleport Vue 3.0新特性之一。 Teleport 是一…

AI技术如何重塑企业EHS安全健康环保体系,附实践案例

随着人工智能技术的快速发展&#xff0c;其在环境、健康和安全&#xff08;EHS&#xff09;管理领域的应用日益广泛。AI技术通过大数据分析、模式识别和预测建模等手段&#xff0c;为EHS管理提供了新的视角和工具。这一变革不仅提升了风险评估和事故预防的效率&#xff0c;同时…

Can‘t use Subversion command line client:svn不能使用Subversion命令行客户端:svn

1、导入idea中会报Can’t use Subversion command line client… 2、在提交svn代码的时候&#xff0c;出现这样的错误&#xff1a;Can’t use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it. 问题原因&#xff1a;在安…

实验8-1-4 拆分实数的整数与小数部分

本题要求实现一个拆分实数的整数与小数部分的简单函数。 函数接口定义&#xff1a; void splitfloat( float x, int *intpart, float *fracpart );其中x是被拆分的实数&#xff08;0≤x<10000&#xff09;&#xff0c;intpart和fracpart分别是将实数x拆分出来的整数部分与…

sqli-labs1-24通关教程

目录 前置知识 第一关 1、第一关是单引号字符型注入,输入id1‘会报错 2、输入注释符正常显示 3、爆出列数为联合做准备 4、使用联合查询爆出数据库名 5、使用information_schema爆出表名 6、猜测用户名再users表中&#xff0c;爆出列名 ​编辑 7、利用查出来的表名数据…

【第2期】2024 搜索客 Meetup | Elasticsearch 的代码结构和写入查询流程的解读

本次活动由 搜索客社区、极限科技&#xff08;INFINI Labs&#xff09;联合举办&#xff0c;活动主题将深入探讨 Elasticsearch 的两个核心方面&#xff1a;代码结构以及写入和查询的关键流程。本次活动将为 Elasticsearch 初学者和有经验的用户提供宝贵的见解&#xff0c;欢迎…

叉车(工业车辆)安全监控管理系统,叉车安全方案

叉车作为特种设备的一种&#xff0c;存在一定的危险性&#xff0c;操作过程出现意外的情况可谓是不胜枚举&#xff0c;轻则伤财、受些皮外伤&#xff0c;重则直接致人死亡。为加强叉车操作的安全管理&#xff0c;从2023年12月1日起实施的TSG 81-2022《场&#xff08;厂&#xf…

【网络安全学习】SQL注入02:使用sqlmap进行注入

1.sqlmap的基本功能 sqlmap的基本功能是对Web应用中的数据库进行自动化的检测、利用和攻击。 使用pikachu靶场进行sqlmap的基础功能使用。 1️⃣ 第一步&#xff1a;先检查是否有注入点&#xff1a; # -u : 指定目标url&#xff0c;也就是指定注入点 sqlmap -u "http:…

终端命令行|CLI工具|CMD|PowerShell

基本概念 终端是一个文本界面&#xff0c;用于执行基于文本的程序。 果你正在运行任何用于 web 开发的工具&#xff0c;你一定需要打开命令行并运行一些命令来使用你所选择的工具 (这样的工具被称为CLI 工具也就是命令行接口工具)。 命令行接口工具 (CLI 工具) 是什么&#xf…

延伸--人工鱼群算法

目录 基本原理 改进策略 代码示例 应用实例 总结 人工鱼群算法在解决多峰函数问题中的具体应用案例和效果如何&#xff1f; 双群人工鱼群算法与传统人工鱼群算法相比&#xff0c;有哪些具体的改进和优势&#xff1f; 步长自适应调整在人工鱼群算法中的实现机制是什么&a…

vue3踩坑问题记录

//vue3element-plus //1、placeholder换行显示 const startTxt ref() const contentText ref<any>() startTxt.value "请描述问题内容、例如&#xff1a;" historyData.prompt.forEach((el:any)>{contentText.value \n${el.question}}) <ElInputv-mo…

点赞收藏测试文章(让我看看有多少机器人在刷互动量)

前言 这里有一些看似合理但实际毫无意义的句子&#xff0c;我需要用它来看看跟我互动的有多少机器人 如果你是人类用户&#xff0c;可以用评论来代替点赞&收藏&#xff0c;爱你~ 目录 前言 正文 1. 紫色的大象在夜空中游泳。 2. 月亮上的饼干师烤出了一片海洋。 3. 时…

数据结构(邓俊辉)学习笔记】词典 03—— 排解冲突(1)

文章目录 1. 一山二虎2. 泾渭分明3. 开放定址4. 线性试探5. 赖惰删除 1. 一山二虎 此前我们已经多次指出&#xff0c;对于需要动态维护的散列表冲突是不可避免的&#xff0c;无论你的散列函数设计的有多么精妙&#xff0c;因此我们不得不回答的第二个重要问题就是一旦发生冲突&…