字符串循环左移
程序员文章站
2022-07-14 20:40:34
...
给定一个字符串S[0…N-1],要求吧S的前k个字符移动到S的尾部,如把字符串"abcdef"前面两个字符‘a’、‘b’移动到字符串的尾部,得到新的字符串“cdefab”;即字符串循环左移k。(时间复杂度为O(n),空间复杂度为O(1))
ps:循环左移k位等价于循环右移n-k位。
三次翻转:
#include <iostream>
#include "string"
using namespace std;
void Reverse(char *s,int m,int n){
for(int i=m,j=n-1;i<j;i++,j--){
char c=s[i];
s[i]=s[j];
s[j]=c;
}
}
int main()
{
char s[20];
gets(s);
int length=strlen(s);
int k;
cin>>k;
if(k>length||k<0)
{
cout<<"error"<<endl;
}
else
{
Reverse(s,k,length);
Reverse(s,0,k);
Reverse(s,0,length);
cout<<s<<endl;
}
return 0;
}