时间O(n)/空间O(1)实现长n字符串前m个移到末尾

#include<iostream>
using namespace std;
//分析空间O(1)实现前m个字符移动末尾,如abcdef前三个移到末尾后:defabc,分为两部分XY,先逆转X,再逆转Y,再把整个字符串逆转即可,见rotateFromLeft2Right函数。

void reverse(char *start,char *end){//字符串首尾逆转
while(start<end){
char temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
}
char *rotateFromLeft2Right(char *str,int num){
if(str){
int len=strlen(str);
if(num<len){
reverse(str,str+num-1);
reverse(str+num,str+len-1);
reverse(str,str+len-1);
return str;
}
}
}
int main(){
printf("please input a string and a number:\n");
char s[100];
int num;
scanf("%s %d",s,&num);
printf(rotateFromLeft2Right(s,num));
return 0;
}

原文地址:https://www.cnblogs.com/dyllove98/p/3131209.html