zoukankan      html  css  js  c++  java
  • 字符串循环移位

    给定字符串,和参数n,把右循环移动n位。
    例如:输入 abc  n = 1 输出 bca
                              n = 2 输出 cab
                              n = 3 输出abc

    思路:原地O(n)

    是向左移位:从第一个元素(第0位)开始i,得到其移动到新位置j,交换,这时原来j位置的值放到第0位了,确定新位置j应该移动到的位置j,与0为值交换,做n次,n=字符总长度!

    如:

    abc,左移动1位时: 首先确定a的位置,在c处,交换其值,再确定c的位置,在b处,交换,再确定b的位置,在a处,交换,结束。。

    也就是,每次都将要交换的值存放到a[0]中。a和c换了,下次就确定c的位置,依次执行n次。。。

    代码如下:

    #include<stdio.h>
    #include<string.h>
    
    swap(char *a,int i, int j)
    {
            char tmp;
            tmp=a[i];
            a[i]=a[j];
            a[j]=tmp;
    }
    
    
    main()
    {
            char a[100];
            int i,j,k,l,n,len;
            scanf("%s",a);
            scanf("%d",&n);;
            len=strlen(a);
            i=0;
            for(k=0;k<len;k++){
                    if(i-n>=0)
                            j=i-n;
                    else
                            j=len+i-n;
                    swap(a,0,j);
                    i=j;
            }
            printf("%s\n",a);
    }

    时间o(n),空间o(1)

  • 相关阅读:
    HDU 5444 Elven Postman 二叉排序树
    HDU 5438 Ponds dfs模拟
    Gym
    markdown test
    Gym
    集训回顾
    UVALive
    UVALive
    UVALive
    codeforcres 589 J
  • 原文地址:https://www.cnblogs.com/byking/p/2963657.html
Copyright © 2011-2022 走看看