美文网首页
字符串的相关操作

字符串的相关操作

作者: _SilverBullet | 来源:发表于2017-01-14 08:02 被阅读13次

    1.字符串的旋转

    将字符串‘abcdef’中头部的‘abc’移到字符串的尾部,变成‘defabc’

    用蛮力法将头部的字符逐个移动到字符串末尾,需要O(m*n)次移动(m是需要移动的字符的个数,n是字符串的长度)。

    比较好的解决方法是三步反转法:将需要移动和不需要移动两个部分的字符串分别反转,然后再对整体字符串进行反转,即可达到目的。

    void LeftRotateString( char* s, int n, int m )
    {
      //如果n>m,就和左移m%n是等价的
      m%=n;
      ReverseString( s,0,m-1 );
      ReverseString( s,n,n-1 );
      //整体反转
      ReverseString( s,0,n-1 );     
    }
    
    void ReverseString( char* s,int left,int right )
    {
      while( left<right )  
      {
        char* t=s[right];
        s[right--]=s[left];
        s[left++]=t;
      } 
    }
    

    相关文章

      网友评论

          本文标题:字符串的相关操作

          本文链接:https://www.haomeiwen.com/subject/rikebttx.html