基础刷题50之四(有效的字母异位词)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、题目
  • 二、力扣官方题解
    • 1、排序
    • 2、哈希表
  • 三、文心一言解释
    • 1、排序
    • 2、哈希表
  • 总结


前言

刚上研一,有人劝我好好学C++,当时用的不多就没学,现在毕业上班了。在此亡羊补牢了
在此感谢力扣和文心一言

一、题目

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

二、力扣官方题解

1、排序

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length()) {
            return false;
        }
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s == t;
    }
};

2、哈希表

在这里插入图片描述

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length()) {
            return false;
        }
        vector<int> table(26, 0);
        for (auto& ch: s) {
            table[ch - 'a']++;
        }
        for (auto& ch: t) {
            table[ch - 'a']--;
            if (table[ch - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
};

三、文心一言解释

1、排序

以下是isAnagram函数的详细解释:

首先,函数检查两个字符串s和t的长度是否相等。如果不相等,它们显然不能是变位词,因此函数直接返回false。

if (s.length() != t.length()) {  
    return false;  
}

接着,函数使用std::sort算法对字符串s和t中的字符进行排序。排序后,如果两个字符串是变位词,它们的字符序列应该相同。

sort(s.begin(), s.end());  
sort(t.begin(), t.end());

最后,函数比较排序后的字符串s和t是否相等。如果相等,说明它们是变位词,函数返回true;否则,返回false。

return s == t;

2、哈希表

这段代码是另一个解决变位词问题的C++实现,使用了哈希表(在这个例子中是一个整数数组table)来记录每个字符的出现次数。与上一个解决方案相比,这种方法在时间复杂度和空间复杂度上都更加优化,因为它只需要一次遍历就可以完成判断。

以下是该代码的详细解释:

首先,函数检查两个字符串s和t的长度是否相等。如果不相等,它们不能是变位词,因此函数直接返回false。

if (s.length() != t.length()) {  
    return false;  
}

接下来,函数创建了一个大小为26的整数数组table,用于记录26个小写英文字母出现的次数。初始时,数组的所有元素都被设为0。

vector<int> table(26, 0);

然后,函数遍历字符串s中的每个字符。对于每个字符,它将table中对应位置(字符 ‘a’ 到 ‘z’ 的ASCII码减去 ‘a’ 的ASCII码)的值加1,以记录字符出现的次数。

for (auto& ch: s) {  
    table[ch - 'a']++;  
}

接着,函数遍历字符串t中的每个字符。对于每个字符,它将table中对应位置的值减1,表示字符的消耗。如果在此过程中table中对应位置的值小于0,说明字符ch在字符串t中出现的次数超过了字符串s中该字符的出现次数,因此s和t不能是变位词,函数返回false。

for (auto& ch: t) {  
    table[ch - 'a']--;  
    if (table[ch - 'a'] < 0) {  
        return false;  
    }  
}

如果函数能够成功遍历完字符串t,并且没有返回false,那么说明s和t中的每个字符都恰好出现相同次数,因此它们是变位词,函数返回true。

return true;
这种方法通过减少不必要的操作(如排序)来提高了效率,特别是对于较长的字符串来说,这种方法的性能优势会更加明显。此外,它只使用了常数空间来存储字符频率表,因此空间复杂度也较低。
需要注意的是,这段代码使用了头文件中的sort函数和头文件中的string类。因此,在实际使用中,你需要在代码文件的开头包含这两个头文件。

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c#触发事件

Demo1 触发事件 <Window x:Class"WPFExample.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"WPF Example" Height"600" Wi…

CSS中的常见选择器

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【网络原理】使用Java基于UDP实现简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;DatagramSocket&#x1f338;DatagramPacket&#x1f338;InetSocketAddress &#x1f333;回显客户端与服务器&#x1f338;建立回显服务器&#x1f338;回显客户端 ⭕总结 我们用Java实现UDP数据报套接字编程&#xff0c;需要借用以下…

大数据平台 hive 部署

大数据平台 hive 部署 平台部署知识 文章讲解了 hive 的安装与部署 需要 Hadoop 以及 MySQL。 目录 文章目录 大数据平台 hive 部署目录前期准备解压 hive 包配置 hive 的环境变量解决 jar 冲突 内嵌模式部署修改 hive-env.sh 文件初始化元数据库 使用 derby启动 HDFS 和 hiv…

每日一题leetcode第2834:找出美丽数组的最小和

目录 一.题目描述 二.思路及优化 三.C代码 一.题目描述 二.思路及优化 首先我们看到这个题&#xff0c;就是根据给出的数组元素个数N&#xff0c;从[1&#xff0c;N]找出N个元素&#xff0c;使得N个元素的和最小&#xff0c;其中随便抽两个数出来&#xff0c;两个数之和不能为…

贝叶斯优化CNN-LSTM回归预测(matlab代码)

贝叶斯优化CNN-LSTM回归预测matlab代码 贝叶斯优化方法则采用贝叶斯思想&#xff0c;通过不断探索各种参数组合的结果&#xff0c;根据已有信息计算期望值&#xff0c;并选择期望值最大的组合作为最佳策略&#xff0c;从而在尽可能少的实验次数下达到最优解。 数据为Excel股票…

【MySQL】MySQL 的 SSL 连接以及连接信息查看

MySQL 的 SSL 连接以及连接信息查看 在上篇文章中&#xff0c;我们学习过 MySQL 的两种连接方式&#xff0c;回忆一下&#xff0c;使用 -h 会走 TCP 连接&#xff0c;不使用 -h 可以使用另两种方式来走 UnixSocket 连接。我们就接着这个话题再聊点别的&#xff0c;首先要纠正一…

计算机服务器中了locked勒索病毒怎么解密,locked勒索病毒解密流程

科技的发展带动了企业生产&#xff0c;越来越多的企业开始利用计算机服务器办公&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也引起了众多企业的关注。近日&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0c;企业的计算机服务器…

图形库实战丨C语言扫雷小游戏(超2w字,附图片素材)

目录 效果展示 游玩链接&#xff08;无需安装图形库及VS&#xff09; 开发环境及准备 1.VS2022版本 2.图形库 游戏初始化 1.头文件 2.创建窗口 3.主函数框架 开始界面函数 1.初始化 1-1.设置背景颜色及字体 1-2.处理背景音乐及图片素材 1-3.处理背景图位置 2.选…

代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N的节点、07.链表相交、142.环形链表II

代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N的节点、07.链表相交、142.环形链表II 24.两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成…

【UE5】创建蓝图

创建GamePlay需要的相关蓝图 在内容游览器文件夹中创建文件夹&#xff0c;命名为Blueprints&#xff0c;用来放这个项目的所有蓝图(Blueprint) 在Blueprints文件夹下新建文件夹GamePlay,用存放GamePlay相关蓝图 在Blueprints文件夹下创建文件夹Character,存放角色相关蓝图 在Ga…

idea连接远程服务器

1. 双击shift&#xff0c;出现如下界面 2. 远程连接 原文来自这个up主的&#xff0c;点击蓝色字体就可以跳转啦&#xff01; 输入主机ip、用户名、密码&#xff0c;点击Test Connection验证&#xff0c;最后点击ok添加成功 有用的话记得给俺点个赞&#xff0c;靴靴~

学会与自己和解

最近半年来&#xff0c;在学习智能驾驶方面的技术&#xff0c;但有些文档和资料不方便分享&#xff0c;有一段时间没有写 写文档啦&#xff01;那就写一些技术之外的东西吧&#xff0c;最近也一直在学心理建设&#xff0c;学会与自己和解 行动 唯有自己先行动起来&#xff0c;…

vue组件之间通信方式汇总

方式1&#xff1a;props和$emit props和$emit仅仅限制在父子组件中使用 1.props&#xff1a;父组件向子组件传递数据 1.1 代码展示 <template><div><!-- 这是父组件 --><div>父组件中的基本数据类型age的值是:{{this.age}}</div><div>…

Web Servlet

目录 1 简介2 创建Servlet项目并成功发布运行3 新加Servlet步骤4 Servlet项目练习5 Servlet运行原理6 操作 HTTP Request头的方法(部分方法示例)7 操作 HTTP Response头的方法(部分方法示例)8 两种重定向(页面跳转)方法9 Cookie9.1 Cookie工作原理9.2 cookie构成9.3 Servlet 操…

LeetCode 1976.到达目的地的方案数:单源最短路的Dijkstra算法

【LetMeFly】1976.到达目的地的方案数&#xff1a;单源最短路的Dijkstra算法 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-ways-to-arrive-at-destination/ 你在一个城市里&#xff0c;城市由 n 个路口组成&#xff0c;路口编号为 0 到 n - 1 &#xff…

202441读书笔记|《笠翁对韵》—— 金菡萏,玉芙蓉,酒晕微酡琼杏颊,香尘浅印玉莲双

202441读书笔记|《笠翁对韵》——金菡萏&#xff0c;玉芙蓉&#xff0c;酒晕微酡琼杏颊&#xff0c;香尘浅印玉莲双 《作家榜名著&#xff1a;笠翁对韵》作者李渔&#xff0c;霍俊明。是所有词句都有注音的一本书&#xff0c;轻松学不认识的字&#xff0c;非常朗朗上口的对偶词…

2024年如何批量下载知乎回答和知乎文章导出pdf?

如何批量下载知乎回答和知乎文章导出pdf&#xff1f;用scraper浏览器扩展 2024 年开发的第一个脚本神器 下载的所有回答html内容&#xff0c;文件名为回答日期加标题。 接着批量将html转换pdf&#xff0c;效果如图&#xff1a; 再将所有pdf合成一个pdf文件&#xff1a; 每个回…

VUE Element例子学习

参考:【前端】VueElement UI案例&#xff1a;通用后台管理系统-项目总结_vue elementui 管理系统-CSDN博客 之前参考的el-admin-web太复杂了&#xff0c;不是纯净的demo. 所以找了一圈资料&#xff0c;找到了这个博客&#xff0c;很合适&#xff0c;有例子的代码&#xff0c;…

vue中性能优化

目录 1. 编码优化 2. 源码优化 3. 打包优化 4. 利用 Vue Devtools 总结 Vue.js 作为一个强大的前端框架&#xff0c;提供了丰富的功能和工具来帮助开发者构建高效的 Web 应用。然而&#xff0c;在开发过程中&#xff0c;性能优化仍然是一个需要关注的问题。以下是对 Vue.j…
最新文章