当前位置: 首页 > news >正文

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

01.02、[简单] 判定是否互为字符重排

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、总结

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

相关文章:

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

01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 在这道题中&#xff0c;我们的任务是判断两个字符串 s1 和 s2 是…...

什么是.NET中的反射,它有哪些应用场景

反射是.NET框架提供的一种强大的机制&#xff0c;它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景&#xff1a; 一、反射的定义 在.NET中&#xff0c;所有类型的信息&#xff08;包括类、结构、委托、接口、枚举等以及它们的成员信息…...

Linux离线部署ELK

文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…...

解决 chls.pro/ssl 无法进入问题

使用charles的xdm不知道有没有遇到这样的问题。手机上访问 chls.pro/ssl 就始终进不去了… 各种检查&#xff0c;ip地址、证书&#xff0c;ssl设置等等都正常&#xff0c;就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...

Rust 游戏开发框架指南

Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一&#xff0c;基于 ECS&#xff08;实体组件系统&#xff09;架构。 特点&#xff1a; &#x1f680; 高性能 ECS 系统&#x1f4e6; 热重载支持&#x1f3a8; 现代渲染器&#x1f50a; 内置音频系…...

hadoop3.3和hive4.0安装——单节点

hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0&#xff0c;因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本&#xff08;配置好环境变量&#xff09; hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…...

centos安装golang

1.下载golang golang所有版本网址 https://studygolang.com/dl //下载并解压到/usr/local文件下 wget https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz //解压并复制到/user/local文件夹下 tar -C /usr/local -zxf go1.18.3.linux-amd64.tar.gz 2.编辑环境变…...

博图 linucx vmware

电脑与 PLC 的连接 博图装在虚拟机里&#xff0c;PLC 通过网线与电脑连接 可以是使用网线直接连接&#xff0c;也可以中间接个路由器或交换机 问题在于虚拟机提供多种网络连接方式&#xff0c;但不是每种都可以与 PLC 建立连接 以 VMware 虚拟机为例&#xff0c;进入编辑/虚拟网…...

Service Work离线体验与性能优化

Service Work离线体验与性能优化 引言 先放个意外事件&#xff0c;万事开头难&#x1f923;&#x1f923;&#x1f923; 原计划是分享离线应用与数据资源缓存的应用实践&#xff0c;结果发现这一技术已被web标准废弃 曾经做过一个PC应用&#xff0c;业务需求要求应用具备容灾…...

Unity 语音转文字 Vosk 离线库

市场有很多语音库&#xff0c;这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的&#xff0c;&#xff08;确保麦克风正常&#xff0c;且索引正确&#xff09;分大…...

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…...

《AI赋能鸿蒙Next,打造极致沉浸感游戏》

在游戏开发领域&#xff0c;鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇&#xff0c;使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中&#xff0c;非…...

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2

文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下&#xff1a; form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...

<C++学习>C++ std 多线程教程

C std 多线程教程 理解多线程的概念 多线程是一种并发编程技术&#xff0c;它允许程序同时运行多个任务。每个线程共享同一进程的资源&#xff08;如内存&#xff09;&#xff0c;但拥有独立的执行路径。多线程编程在现代 C 中变得更加便捷和安全&#xff0c;标准库提供了强大…...

用 Python 自动化处理日常任务

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名

《深入浅出HTTPS​​​​​​​​​​》读书笔记&#xff08;28&#xff09;&#xff1a;DSA数字签名 对称加密算法有很多算法&#xff0c;标准算法是RSA机密算法&#xff0c;数字签名技术也有一个标准DSS&#xff08;Digital Signature Standard&#xff09;&#xff0c;其标准…...

type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)

1.图标类型 <uni-icon>组件中&#xff0c;type可以用来指定图标的不同样式。 <uni-icons type"circle" size"30" color"#007aff"></uni-icons> //表示圆形 <uni-icons type"square" size"30" co…...

PSINS工具箱学习(四)捷联惯导更新算法

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、捷联惯导更新1、insinit():初始化 ins 结构体2、ethupdate():地球自转角速度和牵连角速度更新3、insupdate():捷联惯导更新1. 速度更新2. 位置更新3.…...

P1Linux和Docker常用终端命令:保姆级图文详解

文章目录 前言1、Docker 常用命令1.1、镜像管理1.2、容器管理1.3、网络管理1.4、数据卷管理1.5、监控和性能管理 2、Linux 常用命令分类2.1、文件和目录管理2.2、用户管理2.3、系统监控和性能2.4、软件包管理2.5、网络管理 前言 亲爱的家人们&#xff0c;创作很不容易&#xf…...

Windows重装后NI板卡LabVIEW恢复正常

在重新安装Windows系统后&#xff0c;NI&#xff08;National Instruments&#xff09;板卡能够恢复正常工作&#xff0c;通常是由于操作系统的重新配置解决了之前存在的硬件驱动、兼容性或配置问题。操作系统重装后&#xff0c;系统重新加载驱动程序、清理了潜在的冲突或损坏的…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...