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 ;
}