问题描述:
把字符串的前几个字符移到字符串后面叫做字符串的左旋操作。例如将“abcdef”做左旋转2位就可以得到“cdefab”。要求对长度为n的字符串操作的时间复杂度为o(n),空间复杂度为o(1);
思路一:暴力移位法
#include "stdafx.h"
#include"stdio.h"
//左移一个字符
void leftshiftone(char *s,int n)
{
char t=s[0];
for(int i=1;i<n;i++)
{
s[i-1]=s[i];
}
s[n-1]=t;
}
//左移操作
void leftshift(char *s,int n,int m)
{
while(m--)
{
leftshiftone(s,n);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//初始化字符串
char s[]="abcdef";
//旋转之前
for(int i=0;i<6;i++)
{
printf("%c",s[i]);
}
printf("\n");
//做左移操作
leftshift(s,6,2);
//输出
for(int i=0;i<6;i++)
{
printf("%c",s[i]);
}
printf("\n");
return 0;
}
运行结果: