【实战】ACM 选手图解 LeetCode 反转字符串Ⅱ

本文通过图解和代码实现详细解析 LeetCode 541:反转字符串Ⅱ。根据给定的字符串 s 和整数 k,每隔 2k 个字符反转前 k 个字符。例子:输入 s = “abcdefg”,k = 2,输出:“bacdfeg”。使用双指针解决字符串反转,讨论不同长度字符块的反转情况。

大家好呀,我是加倍反转蛋。

今天解决的反转字符串Ⅱ,是在上篇简单到扣脚的反转字符串的基础上,加了一丢丢的限制条件。

不过不慌,依然还是个简答题,直接肝。

fa7d4c6a0351a337d3225945b2448ac

LeetCode 541:反转字符串Ⅱ

题意

我给定一个字符串 s 和一个整数 k,从开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 个,则反转前 k 个字符,其余字符保持原样。

示例

输入:s = “abcdefg”,k = 2

输出:“bacdfeg”

提示

  • 1 <= s.length <= 10^4
  • s 仅由小写英文组成
  • 1 <= k <= 10^4

题目解析

水题,难度简单。

题意还是很好理解的,一句话说就是:每次隔着 k 个字符反转 k 个字符

字符串的反转,在上道题字符串反转中写过,链接在下面:

ACM 选手图解 Leetcode 反转字符串

重点就是将 s[0] s[1] … s[n-1] 以 s[n-1] … s[1] s[0] 的形式输出。

即 s[i] 和 s[n - i - 1] 交换位置。

可以使用双指针的方式解决字符串反转,维护一个左指针 left 和右指针 right。

初始化 left 指向数组首元素,right 指向数组右元素。

当 left < right 的时候,交换 s[left] 和 s[right],同时 left 右移,right 左移。

f211e282ed84022b934844445507c3b

这道题就是直接按照题意模拟就好了,就是注意一下边界问题,也就是最后剩余的字符块:

  • 剩余字符块的长度 0 <= length <= k 时,不满足 k 个字符,当前字符直接全部反转。
  • 当前字符块的长度 k <= length <= 2k,那前 k 个字符是完整的,只反转前 k 个字符。

图解

以 s = “abcdefg”,k = 2 为例。

按照要求,每次计数至 2k 个字符,则在此,2 * k = 4。

字符串 s 相当于被分为了两部分 “abcd” 和 “efg”。

2e6643cbf299b120f7a79a4ad2d8ef8

既然是模拟,直接看图就好了。

在这我先写了个反转字符串函数:


                
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模与仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建与控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态与位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制与轨迹跟踪。此外,文章还提到了多种优化与控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学与科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究与对比分析; 阅读建议:建议读者结合文中提到的Matlab代码与仿真模型,动手实践飞行器建模与控制流程,重点关注动力学方程的实现与控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值