剑指offer中的面试题替换空格

来源:互联网 发布:和讯黄金软件 编辑:程序博客网 时间:2024/06/06 07:39

替换空格



               

               

               

                  

代码一:


#include <stdio.h>void ReplaceBlank(char string[],int length){if(string==NULL&&length<0){return;}int originalLength=0;int numberOfBlank=0;int i=0;while(string[i]!='\0'){    ++originalLength;   ++i;} int newLength=0;i=0;while(string[i]!='\0'){if(string[i]==' '){newLength=originalLength+2;int indexOfOriginal=originalLength;        int indexOfNew=newLength;while((i+2)!=indexOfNew){string[indexOfNew--]=string[indexOfOriginal];--indexOfOriginal;}string[i++]='%';string[i++]='2';string[i]='0';originalLength=newLength;}i++;}}int main(){char str[]={"we are happy."};    int h=0;    while(str[h]!='\0'){   printf("%c",str[h]);++h;} printf("\n");ReplaceBlank(str,20);h=0;while(str[h]!='\0'){   printf("%c",str[h]);++h;} return 0;}






                                             

                                                  

代码二:


#include <stdio.h>void ReplaceBlank(char string[],int length){if(string==NULL&&length<0){return;}//originalLength为字符串string的实际长度int originalLength=0;int numberOfBlank=0;int i=0;while(string[i]!='\0'){    ++originalLength;    if(string[i]==' ')    {    ++numberOfBlank;}++i;} //newLength为把空格替换成'%20'之后的长度int newLength=originalLength+numberOfBlank*2;if(newLength>length){return;}int indexOfOriginal=originalLength;int indexOfNew=newLength;while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal){if(string[indexOfOriginal]==' '){string[indexOfNew--]='0';string[indexOfNew--]='2';string[indexOfNew--]='%';}else{  string[indexOfNew--]=string[indexOfOriginal];}     --indexOfOriginal; } }int main(){    char str[]={"we are happy."};    int h=0;    while(str[h]!='\0'){   printf("%c",str[h]);++h;} printf("\n");ReplaceBlank(str,20);h=0;while(str[h]!='\0'){   printf("%c",str[h]);++h;} return 0; }




总结:

            这是今天上午在剑指offer中看到的一道面试题,不同解法,效率不同。代码1的时间复杂度O(n^2),因为 剑指offer中只有解题思路,没有核心代码,故代码一为博主自己编写,编程过程中遇到了许多未知的困难,主要是平时编码中未养成良好的编码习惯导致,经过不断的单步调试,一步一步解决了问题,最后对该代码进行了一些简单的测试。如输入的字符串中包含空格(空格位于字符串最前面,位于中间,位于最后面,字符串中有连续多个空格),输入的字符串中没有空格,字符串是个空字符等,代码一全部可得出正确结果。代码二的效率为O(n)。


一点点思考:

           代码一与代码二在连续三个空格下,运行正常,结果正常。当测试连续四个空格时,结果与预想不一致。十分疑惑。有知道的朋友请留言,我们一起进步,真诚感谢!!!






0 0