这好像是传说中微软的一道面试题,没事做来玩玩。第一个方法想的比较ft,从时间复杂度上来看太大了;刚开始想其实是想的第二个方法,只是被第二个方法中把每个word都搞反了而郁闷了一下,其实再reverse一下每个word就纠正过来了:)
//
ReverseInPlace.cpp : Defines the entry point for the console application.
#include
"stdafx.h"
#include
"string.h"
#define SPACE 32
void SwapInPlace(
char * a,
char * b)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
if ( *a != *b )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
*a = *a ^ *b;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
*b = *a ^ *b;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
*a = *a ^ *b;
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
}
void ReverseInPlace(
char* src)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
size_t len = strlen(src);
for ( size_t i=0 ; i < len ; ++i )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
if ( *(src+i) == SPACE )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
for ( size_t m=0 ; m <= i-1 ; ++m )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
for ( size_t n=0 ; n < len-1 ; ++n )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
SwapInPlace(src+n, src+(len+n+1)%len);
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
len -= i;
for ( size_t n=0 ; n < len-1 ; ++n )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
SwapInPlace(src+n, src+(len+n+1)%len);
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
len--;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
i = -1;
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
}
void ReverseInPlace2(
char* src)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
size_t i, start;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
size_t len = strlen(src);
for ( i=0 ; i < len/2 ; ++i )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
SwapInPlace(src+i, src+len-1-i);
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
start = 0;
for ( i=0 ; i < len ; ++i )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
if ( *(src+i) == SPACE || i == len-1 )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
if ( i== len-1 ) i++;
for ( size_t j=0 ; j < (i-start)/2 ; ++j )
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
SwapInPlace(src+start+j, src+i-1-j);
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
start = i+1;
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
}
int _tmain(
int argc, _TCHAR* argv[])
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
{
char str[] = "Reverse A Sentence In Place Absolutely a a";
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
printf("SRC: %s\r\n", str);
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
ReverseInPlace(str);
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
printf("DES: %s\r\n", str);
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
ReverseInPlace2(str);
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
printf("SRC: %s", str);
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
getchar();
![ExpandedBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
}
output:
![None.gif](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
SRC: Reverse A Sentence In Place Absolutely a a
![None.gif](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
DES: a a Absolutely Place In Sentence A Reverse
![None.gif](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
SRC: Reverse A Sentence In Place Absolutely a a