01.02、判定是否互为字符重排

news/2024/12/24 5:55:42/

01.02、leetcode.cn/problems/check-permutation-lcci/description/" rel="nofollow">[简单] 判定是否互为字符重排

1、题目描述

给定两个由小写字母组成的字符串 s1s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

在这道题中,我们的任务是判断两个字符串 s1s2 是否可以通过重新排列字符使得其中一个字符串变为另一个字符串。这意味着,我们需要检查这两个字符串是否包含完全相同的字符,并且每个字符的数量也必须相同。

2、方法一:排序比较法

2.1、思路解析

如果两个字符串是彼此的排列,那么对这两个字符串进行排序后,它们应该完全相同。因此,我们可以通过以下步骤来实现:

  1. 长度判断:首先,检查 s1s2 的长度。如果长度不同,直接返回 false
  2. 排序:对 s1s2 分别进行排序。
  3. 比较:比较排序后的两个字符串是否相等。如果相等,返回 true,否则返回 false
2.2、代码实现
class Solution {
public:bool CheckPermutation(string s1, string s2) {// 如果两个字符串长度不同,必然不能是彼此的排列if (s1.size() != s2.size()) {return false;}// 对两个字符串进行排序sort(s1.begin(), s1.end());sort(s2.begin(), s2.end());// 比较排序后的字符串是否相等return s1 == s2;}
};

3、方法二:哈希表计数法

3.1、思路解析

另一种方法是使用哈希表记录每个字符的出现次数。如果两个字符串是彼此的排列,那么每个字符在两个字符串中的出现次数必须相同。因此,我们可以通过以下步骤来实现:

  1. 长度判断:首先,检查 s1s2 的长度。如果长度不同,直接返回 false
  2. 字符计数:使用一个长度为 26 的数组 hash 来记录 s1 中每个字符的出现次数,并在遍历 s2 的过程中减去相应字符的计数。
  3. 判断字符计数:如果在遍历 s2 的过程中发现某个字符的计数小于 0,说明 s2 中包含了 s1 没有的字符,返回 false
  4. 返回结果:遍历结束后,如果所有字符的计数都为 0,返回 true
3.2、代码实现
class Solution {
public:bool CheckPermutation(string s1, string s2) {// 如果两个字符串长度不同,必然不能是彼此的排列if (s1.size() != s2.size()) {return false;}// 使用哈希表记录每个字符的出现次数int hash[26] = {0};// 统计 s1 中每个字符的出现次数for (const auto& ch : s1) {hash[ch - 'a']++;}// 遍历 s2,减去相应字符的计数for (const auto& ch : s2) {hash[ch - 'a']--;// 如果发现某个字符的计数小于 0,返回 falseif (hash[ch - 'a'] < 0) {return false;}}// 如果遍历结束后没有发现问题,返回 truereturn true;}
};

4、总结

这两种方法都可以有效地判断两个字符串是否为彼此的排列。方法一使用排序比较,简单直观;方法二使用哈希表计数,时间复杂度更低。具体选择哪种方法,可以根据具体情况和需求来决定。


http://www.ppmy.cn/news/1557657.html

相关文章

《类和对象:基础原理全解析(上篇)》

目录 一、浅谈面向过程和面向对象二、C 中的结构体&#xff08;struct&#xff09;1. C 中 struct 的使用 三、C 中的类&#xff08;class&#xff09;四、类的封装性1. 类成员的权限控制关键字2. 权限控制关键字的使用 五、类的六大默认成员函数介绍六、构造函数1. 使用构造函…

go基本知识与语法入门

Go 语言&#xff08;又称 Golang&#xff09;是一种由 Google 开发的开源编程语言&#xff0c;设计目标是简洁、高效、并发友好&#xff0c;适合用于构建高性能的系统和网络应用程序。Go 语言的语法相对简单&#xff0c;非常适合大规模软件开发。 1. 基本结构 Go 程序的基本结…

Jenkins 持续集成部署——Jenkins实战与运维(1)

一、Jenkins 相关配置及代码发布 1. Jenkins 发布 php 代码 1.1 安装插件 先进入“系统管理”&#xff0c;再进入“管理插件”&#xff0c;在“已安装”中检查是否有“Git plugin”和“Publish Over SSH”两个插件&#xff0c;如果没有则需要安装&#xff0c;到“可选插件”中…

HTTP 请求Media typetext/plain application/json text/json区别

这三种媒体类型表示的是内容在 HTTP 请求或响应中传输时的格式和语义&#xff0c;它们之间的主要区别如下&#xff1a; 1. text/plain 用途: 表示纯文本内容&#xff0c;没有格式化和结构化要求。 内容特征: 是简单的纯文本&#xff0c;没有特定的语法结构。 通常不包含…

【网络云计算】2024第51周-每日【2024/12/19】小测-理论-如何实际一个校园网-简要列出

文章目录 1. 需求分析2. 网络架构3. 有线与无线网络覆盖4. 网络设备5. 安全策略6. 网络管理与监控7. 可扩展性与灵活性8. 教育应用与支持9. 用户教育与培训10. 预算与成本控制 【网络云计算】2024第51周-每日【2024/12/19】小测-理论-如何实际一个校园网 设计一个中专的校园网络…

合合信息分享视觉内容安全新技术,助力行业智能化发展

在当今数字化高速发展的时代&#xff0c;视觉内容安全成为备受瞩目的话题。 为探寻AI安全治理的新道路&#xff0c;近日&#xff0c;由中国图像图形学学会主办&#xff0c;浙江大学、杭州全息智能技术研究院、中国图像图形学学会青年工作委员会承办的《中国图形图像学学会青年…

【机器学习】机器学习的基本分类-强化学习-模型预测控制(MPC:Model Predictive Control)

Model Predictive Control (MPC) Model Predictive Control (MPC)&#xff0c;即模型预测控制&#xff0c;是一种基于优化的控制算法&#xff0c;广泛应用于工业、自动驾驶、机器人等领域。它通过预测未来系统的行为&#xff0c;并在线解决优化问题来获得控制输入&#xff0c;…

重拾设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…