现在的位置: 首页 > 综合 > 正文

字符串左移

2018年02月20日 ⁄ 综合 ⁄ 共 511字 ⁄ 字号 评论关闭

给定一个长度为n的字符串,然后将其向左移动m位。例如字符串“abcdef” 左移2位,则变成了“cdefab”

第一种方法:直接移动(暴力)

首先对字符串进行一位移动,如果移动m位,则循环m次,代码如下所示,时间复杂度O(m*n)

void  shiftone(string &s , int m )
{
   while(m--)
     {
	
	char t = s[0];
        int len = s.size();
	for ( int i = 1 ; i < len ; ++i)
	        s[i-1] = s[i];
	
	s[len-1] = t ;
   }
  
	
}

第二种方法:三次反转

abcdef 如果想要移动三位 则变成 defabc 

首先 对abc 反转 则变成了 cba 然后对def 变成了fed  则字符串变成 cbafed  再 对整体反转 变成了defabc

void reverse(string &s , int lo , int hi)
{
	while( lo < hi )
	{
		char t = s[lo] ;
		s[lo++] = s[hi] ;
		s[hi--] = t ;
	}
}

void leftshift(string &s , int m)
{
	int len = s.size() ;
	if ( len >  m )
	{
		 reverse(s,0,m-1);
		 reverse(s,m,len-1);
		 reverse(s,0,len-1) ;
	}
}

抱歉!评论已关闭.