您的位置:首页 > 其它

1.1字符串旋转--左移,右移x位置--三步反转

2016-06-24 14:35 375 查看
给定一个字符串,对其移动,向左或者 向右移动x位置。

这类题对于我们最初学习c语言就是一个典型题。

大概思路:

  1。循环x次,每次执行一步左移或右移。时间复杂度O(m*n)。

进一步优化:

  三步反转法---时间复杂度O(n)。

 具体思路:

   (1)。若左移3位,则将其分为X(1~3),Y(3~n)两部分。

   (2)。将两部分分别反转。

   (3)。 将整体反转。

  例 abcdef 左移3位。

  X abc Y def

  X cba Y fed

  XY  defabc

下面代码照网上学的:

#include <iostream>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

using namespace std;

void reverse(char *left,char *right)  //反转

{

    while(left<right)

    {

        char temp=*left;

        *left=*right;

        *right=temp;

        right--;

        left++;

    }

}

void Leftmove(char *s,int m)            //三次反转

{

    int len=strlen(s);

    m%=len;

    reverse(s,s+len-1);

    reverse(s,s+len-m-1);

    reverse(s+len-m,s+len-1);

}

int main()

{

    char str[100];

    gets(str);

    int k;

    cin>>k;    // 左移k位

    Leftmove(str,k);

    puts(str);

}

  


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: