541. 反转字符串II
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
思路:双指针。
分情况讨论:
- 2k的整数倍
- 剩余字符少于
k
- 剩余字符小于
2k
但大于或等于k
具体实现代码:
void swap(char* a, char* b) {char temp = *a;*a = *b;*b = temp;
}
char* reverseStr(char* s, int k) {int len = strlen(s);int left;for (left = 0; left + 2*k <= len;) {//下一次的位置int nextLeft = left+2*k;int right = left + k - 1;while (left < right) {swap(&s[left],&s[right]);left++;right--;}left = nextLeft;}if (len - left < k) {int right = len - 1;while (left < right) {swap(&s[left],&s[right]);left++;right--;}} else {int right = left + k - 1;while (left < right) {swap(&s[left],&s[right]);left++;right--;}}return s;
}
这一期专栏记录将我每天的刷题,希望各位的监督,也希望和各位共勉。
追光的人,终会光芒万丈!!