题目描述
给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。
三步反转法
#include<stdio.h>
void reverse(char* s, int from, int to) {
while (from < to) {
char t = s[from];
s[from++] = s[to];
s[to--] = t;
}
}
void solution(char* s, int target, int len) {
reverse(s, 0, target - 1);
reverse(s, target, len - 1);
reverse(s, 0, len - 1);
}
void main() {
int i = 0;
char s[] = { 'a','b','c','d','e' };
int len = sizeof(s);
solution(s, 2, len);
while (i<len) {
printf("%c", s[i]);
i++;
}
getchar();
}