看了一圈题解,好像没有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 <= 10
- 接下来上代码
时间复杂度O(N)
char* reverseStr(char* s, int k) { int len = 0; // 计算字符串长度 while (s[len] != '\0') { len++; } // 每 2k 个字符为一组,反转每组的前 k 个字符 for (int start = 0; start < len; start += 2 * k) { int left = start; int right = (start + k - 1 < len) ? start + k - 1 : len - 1; // 反转当前 2k 块中的前 k 个字符 while (left < right) { char temp = s[left]; s[left] = s[right]; s[right] = temp; left++; right--; } } return s; }
当然,也可以使用双指针来完成反转(此处不再展示代码)
个人觉得比较麻烦的就是两种情况怎么写才最简洁
标签:right,int,len,start,541,字符串,leetcode,个字符,left From: https://blog.csdn.net/2403_88666560/article/details/144779130