剑指offer中的面试题替换空格
2017-04-16 20:16
423 查看
替换空格
代码一:
代码二:
总结:
这是今天上午在剑指offer中看到的一道面试题,不同解法,效率不同。代码1的时间复杂度O(n^2),因为 剑指offer中只有解题思路,没有核心代码,故代码一为博主自己编写,编程过程中遇到了许多未知的困难,主要是平时编码中未养成良好的编码习惯导致,经过不断的单步调试,一步一步解决了问题,最后对该代码进行了一些简单的测试。如输入的字符串中包含空格(空格位于字符串最前面,位于中间,位于最后面,字符串中有连续多个空格),输入的字符串中没有空格,字符串是个空字符等,[b]代码一全部可得出正确结果。代码二的效率为O(n)。[/b]
一点点思考:
代码一与代码二在连续三个空格下,运行正常,结果正常。当测试连续四个空格时,结果与预想不一致。十分疑惑。有知道的朋友请留言,我们一起进步,真诚感谢!!!
代码一:
#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]
一点点思考:
代码一与代码二在连续三个空格下,运行正常,结果正常。当测试连续四个空格时,结果与预想不一致。十分疑惑。有知道的朋友请留言,我们一起进步,真诚感谢!!!
相关文章推荐
- 【剑指Offer面试题】 九度OJ1510:替换空格
- [剑指offer][面试题04]实现一个函数,将字符串中的空格替换为“ ”.例如输入“we are happy.”,输出"we are happy.".
- 剑指offer之面试题4替换空格
- 剑指offer面试题4 替换空格
- 剑指offer_面试题4_替换空格(注意时间效率)
- 剑指offer面试题java实现之题4:替换空格
- 剑指offer-----面试题4(替换空格)
- 剑指Offer学习之面试题4 : 替换空格
- 剑指offer面试题:替换空格(将字符串每个空格替换为%20)
- 剑指offer--面试题4:替换空格
- [剑指offer]面试题4:替换空格
- 剑指offer 面试题4—替换字符串中空格
- 剑指Offer----面试题四:替换空格
- 剑指offer - 面试题4:替换空格
- 剑指offer面试题4 替换空格
- 剑指offer 面试题4 替换空格
- 剑指offer面试题4 替换空格(java)
- 剑指offer-面试题4 替换空格
- 【剑指offer】面试题4:替换空格
- 剑指offer-面试题4 - 替换空格