Bootstrap

【string题解 C++】翻转字符串II:区间部分翻转 | 验证回文串

目录

翻转字符串II:区间部分翻转

思路

实现

更好的解决方式

验证回文串

思路

实现

更好的解决方式


翻转字符串II:区间部分翻转

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

难度:简单

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

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

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

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例2:

输入:s = "abcd", k = 2
输出:"bacd"

思路

其实这道题难点在于理解题目到底想干嘛,get到它的意图以后,实现起来就不难了。

而理解题意,最好的办法是画图:

画出这几种情况后,我们发现,题意实际为:反转每个 下标从 2k 的倍数开始的,长度为 k 的子串。若该子串长度不足 k,则反转整个子串。(理解题意真的很重要!!)

可以对string实现分组,每k个为一组,然后组与组之间间隔着反转(第一组反转,第二组不反转,第三组反转……)。

实现

class Solution {
pu

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;