一、题目描述
二、思路
先把前k个字符翻转,再将后(s.length - k)个字符翻转,最后将整个字符串翻转。
三、解题过程
-
实现字符串翻转接口函数
void reverseString(char* s, int left, int right){
while(left < right){
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
-
将字符串中前n个字符翻转
reverseString(s, 0, n - 1);
-
将字符串中后 len - n 个字符翻转
int len = strlen(s);
reverseString(s, n, len - 1);
-
将整个字符串翻转
reverseString(s, 0, len - 1);
-
返回字符串
return s;
四、代码
void reverseString(char* s, int left, int right){
while(left < right){
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
char* reverseLeftWords(char* s, int n){
int len = strlen(s);
reverseString(s, 0, n - 1);
reverseString(s, n, len - 1);
reverseString(s, 0, len - 1);
return s;
}
时间复杂度:O(n),空间复杂度:O(1)。