举个例子,abcef向左旋转两位得到cefab
简单的方法就是先编写一个左移一位的函数,然后移动需要移动的位数k次,这样的话时间复杂度为O(k*n),n为字符串位数
本文思路:令X=ab,Y=cef,则X翻转后得到X^T为ba,Y翻转后得到Y^T为fec,则(X^T,Y^T)拼接后翻转正好是所想要结果
本文的方法时间复杂度为O(k)+O(n-k)+O(n)=O(n)
#include<iostream>
using namespace std;
char* invert(char* start,char* end)
{
char *temp=start;
char t;
while(start<end&&start!=NULL&&end!=NULL)
{
t=*start;
*start=*end;
*end=t;
start++;
end--;
}
return temp;
}
char *rotate(char *s,int n)
{
int len=strlen(s);
invert(s,s+(n-1));
invert(s+n,s+(len-1));
invert(s,s+(len-1));
return s;
}
void main()
{
char a[]="sdfghjkl";
cout<<a[0];
char *s=rotate(a,3);
for(int i=0;i<strlen(s);i++)
{
cout<<s[i]<<" ";
}
cout<<endl;
}