字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小

这是在原有字符串旋转的基础上进行的,比如说给定字符串的组合是:abcdef*hijkl;首先看怎么解决这个问题,然后在给出程序代码。

1,找到*的位置,这很简单,在o(n)时间内就可以找到,记为pos。

2,对*(包括*)之前的字符串进行旋转,结果为*fedcba

3,从*后的字符开始进行再次的旋转,结果为*abcdef加上原来的字符串,那么就是*abcdefhijkl。

从中可以看到,*移动了最左边,字母移动到*号后的相对位置没有更改,同时,可以用这种方法解决有多个*号的情况。但是如果是这个的移动的话或许在时间复杂度方面有缺陷,希望大家看后能够给出一些自己的想法,共同讨论,多谢。

#include
#include
#include
void swap(char *begin,char *end)
{
        char temp;
        while(begin

运行结果:***abcdefghlmnopqrst

对程序又做了一下小小的改进,相信肯定能节省点时间:

#include
#include
#include
static int count=0;
void swap(char *begin,char *end)
{
        char temp;
        while(begin


你可能感兴趣的:(算法)