jake1036

面试100 21左旋转字符串

      21左转字符串

  一 问题描述
        对字符串进行左旋转操作,比如字符串为 cdefab ,执行左旋转2操作之后,字符串变为efabcd 。要求使用o(n)的时间复杂度 和o(1)的空间完成。
       考虑之前实现的字符串中单词翻转问题 I am a student. 问题设单词划分为AB 两部分 ,则BA = (AT BT)T。
        即先对A部分逆转,再对B部分逆转,最后再对上述中间结果,进行逆转 。
 二 代码描述
      

#include <iostream>
 
using namespace std ;
  
  
void reverse(char * l , char * h) //实现逆转 
  {
      
if(l == 0 || h == 0)
        
return ;
         
       
while(l < h)
       
{
        swap(
*l ,*h) ;
          l
++ ;
          h
-- ;       
       }

       
  }

  
  
void leftreverse(char * s, int k , int n)
  
{
       
if(k > n )
         
return ;
       
char * t = s + k - 1;
       
       
char * end = s + n -1 ;
       
       reverse(s , t) ;
       reverse(t 
+ 1 , end) ;
       reverse(s , end) ;
       
       
  }

  
  
int main()
  
{
    
char s[100= "dsadsda" ; //char *s 为字符串常量 
    leftreverse(s , 3 , strlen(s)) ;
    cout
<<s<<endl;
    system(
"pause") ;
    
return 0 ;    
  }



 

posted on 2011-05-18 20:03 kahn 阅读(193) 评论(0)  编辑 收藏 引用 所属分类: 算法相关


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理