这是在原有字符串旋转的基础上进行的,比如说给定字符串的组合是:abcdef*hijkl;首先看怎么解决这个问题,然后在给出程序代码。
1,找到*的位置,这很简单,在o(n)时间内就可以找到,记为pos。
2,对*(包括*)之前的字符串进行旋转,结果为*fedcba
3,从*后的字符开始进行再次的旋转,结果为*abcdef加上原来的字符串,那么就是*abcdefhijkl。
从中可以看到,*移动了最左边,字母移动到*号后的相对位置没有更改,同时,可以用这种方法解决有多个*号的情况。但是如果是这个的移动的话或许在时间复杂度方面有缺陷,希望大家看后能够给出一些自己的想法,共同讨论,多谢。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void swap(char *begin,char *end)
{
char temp;
while(begin<end)
{
temp=*begin;
*begin=*end;
*end=temp;
begin++;
end--;
}
}
void move_string(char *str,int k,int len)
{//k is the position of * in string
swap(str,str+k);
swap(str+1,str+k);
}
in