刷爆力扣之亲密字符串

news2024/11/18 17:48:12

刷爆力扣之亲密字符串

HELLO,各位看官大大好,我是阿呆 🙈🙈🙈

今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQxVTy6X-1671789203008)(刷爆力扣之亲密字符串.assets/7056857c6043be6cd091a38ae3c63184-1671789186883.jpg)]

该专栏按照不同类别标签进行刷题,每个标签又分为 Easy、Medium、Hard 三个等级 👊👊👊

本部分所有题目均来自于LeetCode 网,并于每道题目下标明具体力扣网原题链接 🏃🏃🏃

OK,兄弟们,废话不多直接上题,冲冲冲 🌞🌞🌞


一 🏠 题目描述

859. 亲密字符串

给你两个字符串 sgoal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false

交换字母的定义是:取两个下标 ij (下标从 0 开始)且满足 i != j ,接着交换 s[i]s[j] 处的字符。

  • 例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad"

示例 1:

输入:s = "ab", goal = "ba"
输出:true
解释:你可以交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 相等。

示例 2:

输入:s = "ab", goal = "ab"
输出:false
解释:你只能交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 不相等。

示例 3:

输入:s = "aa", goal = "aa"
输出:true
解释:你可以交换 s[0] = 'a' 和 s[1] = 'a' 生成 "aa",此时 s 和 goal 相等。

提示:

  • 1 <= s.length, goal.length <= 2 * 104
  • sgoal 由小写英文字母组成

二 🏠破题思路

2.1 🚀 关键信息

解决问题第一步,当然先提取题目字面上的关键信息 😎😎😎

输入:s = "ab", goal = "ab"
输出:false
解释:你只能交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 不相等。

题目很直白,特别注意一点,s = "ab", goal = "ab", 输出 falses = "aab", goal = "aab", 输出 true,说明若两字符串完全相同,有重复字符才为 TRUE 🌸🌸🌸


提取完题目中的关键信息后,直接进入第二阶段,思路整理 😃😃😃


2.2 🚀 思路整理

分类讨论法

1、长度不相等,直接返回 FALSE

2、两字符串完全相同,有重复字符即为 TRUE

3、长度相等且内容不等,找不同字符对应下标,若下标数量不为 2 即 FALSE;下标数量为 2 且交换两下标字符后与另一字符串相同,则为 TRUE 🌷🌷🌷


整理完解题思路后,直接进入第三阶段,代码实现 😃😃😃


三 🏠 代码详解

3.1 🚀 代码实现

按照我们刚才的破题思路,直接代码走起来 👇👇👇👇

bool buddyStrings(string s, string goal) {
    //获取字符串长度,初始化不同字符计数,第一个不同字符索引
    int len = s.size(), count = 0, frontIndex = 0; 
    if (len != goal.size()) return false; //长度不相等,直接返回 FALSE

    for (int i = 0; i < len && count < 3; ++i) { //遍历字符串(count为 3 结束遍历)
        if (s[i] != goal[i]) { //当出现字符不同时
            ++count; //不同字符计数加加
            if (count == 1) frontIndex = i; //记录第一个不同字符索引
            else if ((count == 2) && (s[frontIndex] != goal[i]) 
                     || (s[i] != goal[frontIndex])) return false;
            //当 count == 2 且不满足交换两下标字符后与另一字符串相同时, 返回 false
        } 
    }

    if (count == 2) return true; //count == 2 且满足交换两下标字符后与另一字符串相同
    if (count == 1 || count == 3) return false; //count == 1 || count == 3
	
    //特殊处理 : 两字符串完全相同,有重复字符即为 TRUE
    std::unordered_multiset<char> goalSet(goal.begin(), goal.end());
   	for (auto& elem : goalSet) if (goalSet.count(elem) >= 2) return true; 
    return false;
}

3.2 🚀 细节解析

看完 👀👀👀 全注释版的代码实现后,相信看官大大对整体逻辑已经是大写的 OK 了 😃😃😃

那么我们挖掘上述实现的晦涩细节 😖😖😖 进行解析,直接开干,走起来 👇👇👇👇

for (int i = 0; i < len && count < 3; ++i)  //遍历字符串(count为 3 结束遍历)

count3 时就不需要遍历了,因为 count >= 3, return false 🐌🐌🐌


if ((count == 2) && (s[frontIndex] != goal[i]) || (s[i] != goal[frontIndex])) 
return false;

count == 2 且不满足交换两下标字符后与另一字符串相同时, 返回 false

比较与另一字符串是否相同(其它字符都相同),当然只需交换位置比较这两个不同字符即可 🐳🐳🐳


四 🏠 心路历程

为方便各位看官大大了解博主真实刷题过程,我把当时状态纯纯真实还原,记录在心路历程这一小节,不感兴趣的小伙伴可以直接跳过哈

博主在第一阶段提取 🚀 关键信息没有问题,在第二阶段 🚀 思路整理没有问题,上述实现和题解博主原创


五 🏠 结语

身处于这个浮躁的社会,却有耐心看到这里,你一定是个很厉害的人吧 👍👍👍

如果各位看官大大觉得文章有帮助的话,别忘了点赞 + 关注哦,你们的鼓励就是我最大的动力

博主还会不断更新更优质的内容,加油吧!技术人! 💪💪💪

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

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

相关文章

基于VUE学生选课管理系统

开发工具(eclipse/idea/vscode等)&#xff1a;idea 数据库(sqlite/mysql/sqlserver等)&#xff1a;mysql 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 一、登录注册模块: 1.学生&#xff0c;教师&#xff0c;管理员三个角色&#xff08;同一时刻&#xff0c;账户…

Incorporating Dynamic Semantics into Pre-Trained Language Model for ABSA 论文阅读笔记

一、作者 Kai Zhang、Kun Zhang、Mengdi Zhang、Hongke Zhao、Qi Liu、Wei Wu、Enhong Chen School of Data Science, University of Science and Technology of China School of Computer Science and Information Engineering, Hefei University of Technology Meituan …

移动端Swiper的一些尝试(中间完整,两边有内容,循环展示)

【背景】最近公司的需求很多实现一个Swiper滑块&#xff0c;中间完整。两边展示一些内容&#xff08;可能是固定的提示方案&#xff0c;也可能是前后上下一页的部分内容&#xff09;&#xff0c;然后还需要循环滚动&#xff0c;其中遇到了一些问题特此记录 1、实现两边展示内容…

Canvas 从进阶到退学

本文简介 点赞 关注 收藏 学会了 接着 《Canvas 从入门到劝朋友放弃&#xff08;图解版&#xff09;》 &#xff0c;本文继续补充 canvas 基础知识点。 这次我不手绘了&#xff01; 本文会涉及到 canvas 的知识包括&#xff1a;变形、像素控制、渐变、阴影、路径 变形 这…

向量杂记(python)

以 O 点为圆心&#xff0c; 绘制如上图&#xff0c; 则有向量 vOA&#xff0c; vOB, vOC, vOD 再给定一个X轴方向的单位向量 vX [1, 0] 则 向量 vOA&#xff0c; vOB, vOC, vOD 分别与 vX 进行叉乘&#xff1a; # python 代码 # X Y 轴上的单位向量 vX [1, 0] vY [0, 1]vA …

Matter理论介绍-通用-1-05:桥接设备-发现与配置流程

【源码、文档、软件、硬件、技术交流、技术支持&#xff0c;入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取&#xff0c;免安装&#xff0c;解压即用】 持续更新中&#xff0c;欢迎关注&#xff01; 一、桥接设备的发现 桥接设备如何被其他Matter终端发现呢…

论文阅读《FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding》

论文地址&#xff1a;https://arxiv.org/pdf/2103.05950.pdf 代码地址&#xff1a;https://github.com/megvii-research/FSCE 对比学习https://zhuanlan.zhihu.com/p/346686467 目录1、存在的问题2、算法简介3、算法细节3.1、new-baseline3.2、对比建议编码3.3、对比建议编码的…

(第二章)OpGL超级宝典学习:创建我们第一个OpenGL程序,绘制一个点和三角形

目录前言创建简单的应用创建脚本渲染底色渲染底色plus使用着色器&#xff08;shader&#xff09;什么是着色器&#xff08;shader&#xff09;GLSLOpenGL的着色阶段编写着色器顶点着色器片段着色器shader对象的创建执行程序的创建删除无用的shader顶点数组对象VAO清理VAO和Prog…

跨孔CT交叉梯度联合反演算法

跨孔CT交叉梯度联合反演算法 利用交叉梯度函数的结构约束作用实现多种跨孔CT的联合反演。 文章目录跨孔CT交叉梯度联合反演算法1、跨孔CT原理2、跨孔CT正演算法2.1 多模块快速推进算法2.2 最短路径法弯曲射线追踪2.3 胖射线追踪2.4 直射线追踪3、跨孔CT正演模型4、交叉梯度联合…

Matlab渐变色生成/编辑器专业版—ColorMapPro

渐变配色在科研绘图时十分常用&#xff0c;比如三维柱状图、特征渲染散点图、热图、曲面图、等高线填充图等等&#xff0c;都需要使用渐变配色。 虽说现成的渐变配色有很多&#xff0c;比如&#xff0c;在TheColor配色工具的渐变颜色库中便集成了近千种的渐变色&#xff1a; 然…

Lambda Python 创建和使用 Layer

目标 由于 Python 代码中需要用到第三方的库, 在 Lambda 中可以通过创建自定义层(Layer)的方式来将这些依赖提供给 Lambda 运行环境. 下面演示创建一个包含第三方库 requests 的层, 以及如何在 Lambda 中调用 准备 zip 文件 首先在本地电脑上将相关依赖下载到名为 python 的…

32.多输入多输出通道

通道数是一个重要的超参数&#xff0c;通常是会仔细设计的。 在之前&#xff0c;我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。 当我们添加通道时&#xff0c;我们的输入和隐藏的表示都变成了三维张量。例如&#xff0c…

OpenPCDet详细安装指南+单/多GPU训练演示

OpenPCDet详细安装指南单/多GPU训练演示前言个人环境一览安装环境安装的各版本1. 创建conda虚拟环境2. 安装PyTorch3. 安装spconv4. 安装PCDet5. 训练单GPU训练多GPU训练前言 本人总共花了两个晚上一个下午安装&#xff0c;中间因为各种版本错误、版本不兼容报各种奇奇怪怪的错…

Windows 下使用 Docker + MySQL 安装 Wiki.js

Windows 下使用 Docker MySQL 安装 Wiki.jsIntroductionChapter 1 配置数据库Part 1 数据库安装Part 2 创建 Wiki 相关配置并修改权限Chapter 2 配置 Wiki.jsPart 1 安装Part 2 配置 WikiIntroduction Wiki 是一种在网络上开放且可供多人协同创作的系统&#xff0c;比较著名的…

【触摸屏功能测试】昆仑通态MCGS——测试通过HJ212_TCPIP驱动4G功能发送212报文

1、触摸屏功能测试 型号&#xff1a;TPC7022Ni 测试内容&#xff1a; 实现4G触摸屏&#xff0c;通过自带的4G卡向平台发送HJ212报文 2、HJ212_TCPIP 驱动说明 2.1、驱动介绍 本驱动构件用于MCGS软件,通过污染物在线监控(监测)系统数据传输标准协议向下位机数采仪发送各类指…

MCU-51:静态数码管显示

目录一、数码管介绍2.1 介绍2.2 数码管引脚定义2.3 原理图二、要用到的C语言知识2.1 数组2.2 子函数三、数码管显示3.1 单个数码管显示3.2 通过定位函数实现数码管显示四、动态数码管显示一、数码管介绍 2.1 介绍 LED数码管&#xff1a;数码管是一种简单、廉价的显示器&#…

Word表格常见设置汇总

Word表格常见设置汇总 总结一些Word中常用的关于表格的设置问题。 文章目录1.居中设置2.隔页显示表格首行设置3.边框边线粗细及显示设置4.表格斜线设置5.单元格合并与拆分设置1.居中设置 全选要居中显示部分→布局→选择居中类型。 2.隔页显示表格首行设置 选择表格→表格属性→…

idea插件之自动生成时序图(Sequence Diagram)

前言 小伙们&#xff0c;你们有没有发现&#xff0c;身边经常有这样一些人&#xff0c;看着平时没怎么干活&#xff0c;到关键时候需要展示工作成果&#xff0c;会发现这些人也有工作成果&#xff0c;甚至比辛苦在干的人可能还要多一些。按常理推测&#xff0c;这绝对不是一件科…

【小程序】案例 - 本地生活(首页)

1. 首页效果以及实现步骤 新建项目并梳理项目结构 配置导航栏效果 配置 tabBar 效果 实现轮播图效果 实现九宫格效果 实现图片布局 2. 接口地址 获取轮播图数据列表的接口 【GET】 https://www.escook.cn/slides 获取九宫格数据列表的接口 【GET】 https://www.esco…

XXE工具——XXEinjection安装与使用

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是XXE工具——XXEinjection安装与使用。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1…