且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Code: Reverse A Sentence in Place

更新时间:2021-08-13 22:12:44

  这好像是传说中微软的一道面试题,没事做来玩玩。第一个方法想的比较ft,从时间复杂度上来看太大了;刚开始想其实是想的第二个方法,只是被第二个方法中把每个word都搞反了而郁闷了一下,其实再reverse一下每个word就纠正过来了:)

Code: Reverse A Sentence in Place// ReverseInPlace.cpp : Defines the entry point for the console application.
Code: Reverse A Sentence in Place

Code: Reverse A Sentence in Place#include "stdafx.h"
Code: Reverse A Sentence in Place#include "string.h"
Code: Reverse A Sentence in Place
Code: Reverse A Sentence in Place#define SPACE    32
Code: Reverse A Sentence in Place
Code: Reverse A Sentence in Placevoid SwapInPlace(char * a, char * b)
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place    if ( *a != *b )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place    Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place        *a = *a ^ *b;
Code: Reverse A Sentence in Place        *b = *a ^ *b;
Code: Reverse A Sentence in Place        *a = *a ^ *b;
Code: Reverse A Sentence in Place    }
Code: Reverse A Sentence in Place}
Code: Reverse A Sentence in Place
Code: Reverse A Sentence in Placevoid ReverseInPlace(char* src)
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place    size_t len = strlen(src);
Code: Reverse A Sentence in Place    for ( size_t i=0 ; i < len ; ++i )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place    Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place        if ( *(src+i) == SPACE )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place        Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place            for ( size_t m=0 ; m <= i-1 ; ++m )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place            Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place                for ( size_t n=0 ; n < len-1 ; ++n )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place                Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place                    SwapInPlace(src+n, src+(len+n+1)%len);
Code: Reverse A Sentence in Place                }
Code: Reverse A Sentence in Place            }
Code: Reverse A Sentence in Place            len -= i;
Code: Reverse A Sentence in Place            for ( size_t n=0 ; n < len-1 ; ++n )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place            Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place                SwapInPlace(src+n, src+(len+n+1)%len);
Code: Reverse A Sentence in Place            }
Code: Reverse A Sentence in Place            len--;
Code: Reverse A Sentence in Place            i = -1;
Code: Reverse A Sentence in Place        }
Code: Reverse A Sentence in Place    }
Code: Reverse A Sentence in Place}
Code: Reverse A Sentence in Place
Code: Reverse A Sentence in Placevoid ReverseInPlace2(char* src)
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place    size_t i, start;
Code: Reverse A Sentence in Place    size_t len = strlen(src);
Code: Reverse A Sentence in Place    for ( i=0 ; i < len/2 ; ++i )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place    Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place        SwapInPlace(src+i, src+len-1-i);
Code: Reverse A Sentence in Place    }
Code: Reverse A Sentence in Place    start = 0;
Code: Reverse A Sentence in Place    for ( i=0 ; i < len ; ++i )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place    Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place        if ( *(src+i) == SPACE || i == len-1 )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place        Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place            if ( i== len-1 ) i++;
Code: Reverse A Sentence in Place            for ( size_t j=0 ; j < (i-start)/2 ; ++j )
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place            Code: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place                SwapInPlace(src+start+j, src+i-1-j);
Code: Reverse A Sentence in Place            }
Code: Reverse A Sentence in Place            start = i+1;
Code: Reverse A Sentence in Place        }
Code: Reverse A Sentence in Place    }
Code: Reverse A Sentence in Place}
Code: Reverse A Sentence in Place
Code: Reverse A Sentence in Placeint _tmain(int argc, _TCHAR* argv[])
Code: Reverse A Sentence in PlaceCode: Reverse A Sentence in PlaceCode: Reverse A Sentence in Place{
Code: Reverse A Sentence in Place    char str[] = "Reverse A Sentence In Place Absolutely a a";
Code: Reverse A Sentence in Place    printf("SRC: %s\r\n", str);
Code: Reverse A Sentence in Place    ReverseInPlace(str);
Code: Reverse A Sentence in Place    printf("DES: %s\r\n", str);
Code: Reverse A Sentence in Place    ReverseInPlace2(str);
Code: Reverse A Sentence in Place    printf("SRC: %s", str);
Code: Reverse A Sentence in Place    
Code: Reverse A Sentence in Place    getchar();
Code: Reverse A Sentence in Place}

output:
Code: Reverse A Sentence in PlaceSRC: Reverse A Sentence In Place Absolutely a a
Code: Reverse A Sentence in PlaceDES: a a Absolutely Place In Sentence A Reverse
Code: Reverse A Sentence in PlaceSRC: Reverse A Sentence In Place Absolutely a a

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。