算法训练营第十六天| 541.反转字符串II
建议本题又进阶了自己先去独立做一做然后在看题解对代码技巧会有很深的体会。题目链接https://leetcode.cn/problems/reverse-string-ii/ 视频链接https://www.bilibili.com/video/BV1dT411j7NN思路;1. 先理解题目规则核心每2k 个字符算一组每组里反转前 k 个后 k 个保持不变最后剩下的字符少于 k 个 →全部反转≥k 但 2k 个 →只反转前 k 个2. 代码怎么实现这个规则1遍历方式一次跳 2kc运行i 2 * k;不一个个遍历直接跳 2k跳到下一组的开头完美匹配题目要求2确定反转区间只反转前 k 个c运行int end i k - 1;从当前位置i开始反转到i k - 1刚好k 个字符3处理末尾边界最重要c运行if (end len) { end len - 1; }如果剩下的字符不足 k 个就把终点改成字符串最后一位实现「剩余字符全部反转」4原地反转双指针c运行void reverse(char *s, int start, int end)双指针从两头往中间交换不用额外空间速度最快用示例 1 模拟一遍秒懂s abcdefg,k 2长度 7第 1 轮i 0反转区间0 ~ 1前 2 个ab → ba字符串变成bacdefgi 跳到 0 4 4第 2 轮i 4反转区间4 ~ 5前 2 个ef → fe字符串变成bacdfegi 跳到 4 4 8第 3 轮i 8 ≥ 7结束遇到的困难循环步长理解错误容易写成i逐个遍历无法按照2k分段导致反转逻辑混乱不符合题目规则。反转区间下标计算错误混淆i k和i k - 1区间多一位或少一位造成反转范围错误忽略字符串末尾边界引发数组越界。题目三种情况难以区分无法理清剩余≥2k、k≤剩余2k、剩余k 三种场景想用多重if嵌套判断代码冗余且容易出错本题通过限制右边界可统一处理所有情况。边界处理遗漏没有判断末尾字符不足 k 的情况直接使用ik-1会访问字符串外的空间造成运行错误。C 语言字符串操作细节忘记引入头文件string.h导致strlen无法使用不熟悉原地字符交换写法额外开辟数组增加空间复杂度。函数调用与参数出错调用反转函数时起始、结束下标传参错误导致反转结果不符合样例。c语言代码#include string.h // 区间反转[start, end] void reverse(char *s, int start, int end) { while (start end) { char temp s[start]; s[start] s[end]; s[end] temp; start; end--; } } char* reverseStr(char* s, int k) { int len strlen(s); int i 0; // 以 2k 为一段遍历 while (i len) { // 计算当前需要反转的k个字符的右边界 int end i k - 1; // 处理末尾越界剩余不足k个时反转到末尾 if (end len) end len - 1; reverse(s, i, end); // 直接跳到下一个2k区间开头 i 2 * k; } return s; }今日收获理解了反转字符串 II 的题意规则掌握以2k为单位分段处理字符串的核心思想明确每段只反转前 k 个字符。学会封装区间反转函数运用双指针原地交换字符实现指定范围字符串反转熟悉常用字符串操作写法。掌握跳跃式循环写法循环索引每次增加 2k简化分段逻辑避免逐个遍历带来的逻辑混乱。强化数组下标边界处理能力学会限制反转右边界统一处理字符充足、剩余不足 k 个等多种边界场景防止下标越界。学会简化分支判断用统一逻辑覆盖题目三种剩余字符情况减少冗余代码提升代码简洁性与健壮性。巩固 C 语言字符串操作、自定义函数调用、原地修改数据的编程基础提升字符串类题型的解题思维。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2561847.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!