您的位置:首页 > 职场人生

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

2017-04-16 20:16 423 查看
替换空格


               



               



               



                  



代码一:


#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中只有解题思路,没有核心代码,故代码一为博主自己编写,编程过程中遇到了许多未知的困难,主要是平时编码中未养成良好的编码习惯导致,经过不断的单步调试,一步一步解决了问题,最后对该代码进行了一些简单的测试。如输入的字符串中包含空格(空格位于字符串最前面,位于中间,位于最后面,字符串中有连续多个空格),输入的字符串中没有空格,字符串是个空字符等,[b]代码一全部可得出正确结果。代码二的效率为O(n)。[/b]

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: