字符串的相关操作

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;
  } 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 原文地址给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的...
    王尼小老板阅读 899评论 0 4
  • 01 “我在一条路看不到尽头的路上走啊走啊,有人叫着“小梦、小梦... ...” “压力不要太大了,多休息,做梦属...
    高皇阅读 587评论 9 9
  • …命运善嫉,总吝啬赋予世人恒久的平静,总猝不及防地把人一下子塞进过山车,任你怎么恐惧挣扎也不肯轻易停下来,非要把圆...
    南笙浅墨阅读 247评论 0 0
  • 目录 上一章 坠落吧,梦里的声音生硬的叫喊。于是我的身体就这么直直地坠下去,坠入无底的深渊…… 耳边的风呼呼吹过,...
    嘉晟阅读 162评论 0 0