字符串移位

    把一个字符串左选择操作:吧字符串前面的的若干字符移动到字符串的尾部,如吧字符串的abcdef左旋转2位得到字符串cdefab。

   思路1.暴力移位发

    把移动m部拆分成移动一步。

    void leftshiftone(char* s,int n){

        char t=s[0];

        for(int i=1;i<n;++i)

       {

             s[i-1]=s[i];

       }

      s[n-1]=t;

     }

     移动m位,如下

    void leftshift(char* s,int n,int m)

  {

       while(m--)

        {

            leftshiftone(s,n);

        }

   }

2.指针翻转法

    abc def ghi->def abc ghi->def ghi abc

   定义两个指针,p1指向ch[0],p2指向ch[m];

   一下过程循环m次,交换p1和p2所指的元素,然后p1++,p2++;

    1.第一步,交换abc和def,abc defghi->def abc ghi

    2.第二步,交换abc和ghi,def abcghi->def ghiabc

    程序设计,先循环m次,交换abc,def,之后判断p2+m-1.

    #include<iostream>

    void rotate(string &str,int m)

   {

      if(str.length()==0||m<=0)

             return;

       int n=str.length();

       if(m%n<=0)

           return ;

        int p1=0,p2=m;

        int k=(n-m)-n%m;

        while(k--)

        {

              swap(str[p1],str[p2])

              p1++;

              p2++;

         }

        int r=n-p2;

       while(r--)

       {

             int i=p2;

             while(i>p1)

            {

                swap(str[i],str[i-1]);

                 i--;

            }

          p2++;

          p1++;

      }

思路3,递归转换

    

       


   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值