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;
}
这一期专栏记录将我每天的刷题,希望各位的监督,也希望和各位共勉。
追光的人,终会光芒万丈!!