舉個例子,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;
}