字符串的相关操作

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

你可能感兴趣的:(字符串的相关操作)