定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转
2位得到字符串
cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
#include <stdio.h>
void ReverseStr(char* s,int from,int to)
{
while (from < to)
{
char t = s[from];
s[from++] = s[to];
s[to--] = t;
}
}
void LeftRotateStr(char* s,int n,int m)
{
m %= n;
ReverseStr(s, 0, m - 1);
ReverseStr(s, m, n - 1);
ReverseStr(s, 0, n - 1);
}
int main(void)
{
char str[] = "abcdef";
LeftRotateStr(str, 6, 2);
printf("str = %s\n", str);
return 0;
}
/*
打印
str = cdefab
*/