题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的函数。要求时间对长度为 n 的字符串操作的复杂度 为 O(n),辅助内存为 O(1)。
#include<iostream>
#include<string.h>
#include<assert.h>
using namespace std;
void reverse_str(char *le, char *ri)
{
assert(le);
assert(ri);
while (le < ri)
{
char tmp = *le;
*le = *ri;
*ri = tmp;
le++;
ri--;
}
}
void reverse(char *str,int n)
{
int len = strlen(str);
char *start = str;
char *end = str + len - 1;
reverse_str(start,start+n-1);
reverse_str(start+n,end);
reverse_str(start,end);
}
int main()
{
char p[] = "abcdef";
reverse(p, 2);
printf("%s\n", p);
return 0;
}