题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
a b c d e f g h
1 2 3 4 5 6 7 8
首先将第一个位置的 a 赋值给 char t,然后将4号位的“d”,赋值到1号位,再将2号位复制到4号位,再将3号位赋值到5号位!
#include <iostream>
bool invert(char* str,int n);
int main()
{
char scr[20] = "abcdefghi" ;
invert(scr,4);
return 0 ;
}
bool invert(char* str,int n)
{
if (str == NULL)
return false ;
int len = strlen(str);
if (len<n)
return false;
int i=0;
char t = str[i];
str[i] = str[i+n];
i++;
while (len-i>2*n)
{
for (int j=0;j<n-1;j++)
{
str[i+n-1] = str[i] ;
str[i] = str[i+n];
i++;
}
}
for (;i<len-n+1;i++)
{
for (int k=i+n-1;k>i;k--)
str[k] = str[k-1];
str[i] = str[i+n] ;
}
str[len-n] = t ;
return true;
}