力扣第541题 反转字符串 II c++注释 双指针基础版
题目
简单
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2 输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2 输出:"bacd"
提示:
1 <= s.length <= 104
s
仅由小写英文组成1 <= k <= 104
思路和解题方法
- 声明一个整数变量
i
用于循环迭代,初始值为0。- 在循环中,每次以2k为步长进行迭代,即每次处理2k个字符。
- 对于每个组,判断如果当前位置
i
加上k
仍然小于等于字符串s
的大小,则表示该组内有足够的k个字符可以进行反转操作。
- 调用
reverse
函数对从i
到i+k-1
的字符进行反转操作。- 继续下一次迭代。
- 如果剩余字符不足k个,则将剩余字符全部反转。
- 调用
reverse
函数对从i
到末尾位置s.size()-1
的字符进行反转操作。- 循环结束后,返回最终得到的字符串
s
。在函数中还定义了一个辅助函数
reverse
,用于将给定字符串s
中指定范围从i
到j
的字符进行反转操作。
复杂度
时间复杂度:
O(n)
时间复杂度是O(n),其中n是字符串的长度。循环迭代的次数是字符串长度的一半,因为每次迭代处理2k个字符。
空间复杂度
O(1)
空间复杂度是O(1),没有使用额外的空间,只是对原字符串进行了原地修改。没有使用额外的数组或数据结构来存储中间结果。因此,空间复杂度是常量级别的。
c++ 代码
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size();
// 遍历字符串,每次步长为2k
for(int i = 0; i < n; i += 2*k) {
// 反转前k个字符或剩余字符中的全部字符
reverse(s, i, min(i + k - 1, n - 1));
// if(i+k<=s.size())
//{
// reverse(s,i,i+k-1);
// continue;
//}
//reverse(s,i,s.size()-1);
}
return s;
}
// 辅助函数:反转字符串s中从i到j的字符
void reverse(string& s, int i, int j) {
while(i < j) {
swap(s[i], s[j]);
i++;
j--;
}
}
};
觉得有用的话可以点点赞,支持一下。
如果愿意的话关注一下。会对你有更多的帮助。
每天都会不定时更新哦 >人< 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)