剑指offer——替换空格
2018-02-27 13:29
211 查看
题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目分析:
拿到题目后,我们很容易想到从前向后遍历字符串,找到空格后,进行替换。因为将空格替换为“%20”,一个字符变为了三个字符,所以要将空格后面的字符均向后移动,否则就有两个字符被覆盖了。但是这种解决办法存在大量的移动,效率较低。例如:假设字符串的长度为n,对每个空格字符,需要移动后面的O(n)个字符,因此对含有O(n)个空格字符的字符串而言总的时间效率是O(n2)。
显然这样的解法不能满足面试官的要求,寻找一种时间复杂度更小的解法。
我们可以先遍历一次字符串得到字符串中空格字符的个数,计算得到替换后的总字符长度。每替换一个空格,字符串的长度加2。在替换过程中,从后向前依次遍历进行赋值和替换工作。首先准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后字符串的末尾。向前移动P1指针,逐个把它复制到P2指向的位置,直到碰到第一个空格为止。当碰到第一个空格后,P2之前插入“%20”,P2的值减3。当P1与P2指向同一位置时,表示所有空格已经替换完毕。从分析看出,所有字符仅仅移动一次,所以时间效率为O(n)。
![](https://img-blog.csdn.net/20180227132611247?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzcxMzU0MjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
参考代码如下:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目分析:
拿到题目后,我们很容易想到从前向后遍历字符串,找到空格后,进行替换。因为将空格替换为“%20”,一个字符变为了三个字符,所以要将空格后面的字符均向后移动,否则就有两个字符被覆盖了。但是这种解决办法存在大量的移动,效率较低。例如:假设字符串的长度为n,对每个空格字符,需要移动后面的O(n)个字符,因此对含有O(n)个空格字符的字符串而言总的时间效率是O(n2)。
显然这样的解法不能满足面试官的要求,寻找一种时间复杂度更小的解法。
我们可以先遍历一次字符串得到字符串中空格字符的个数,计算得到替换后的总字符长度。每替换一个空格,字符串的长度加2。在替换过程中,从后向前依次遍历进行赋值和替换工作。首先准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后字符串的末尾。向前移动P1指针,逐个把它复制到P2指向的位置,直到碰到第一个空格为止。当碰到第一个空格后,P2之前插入“%20”,P2的值减3。当P1与P2指向同一位置时,表示所有空格已经替换完毕。从分析看出,所有字符仅仅移动一次,所以时间效率为O(n)。
参考代码如下:
void replaceSpace(char *str,int length) { int strlen = length; int i; for(i = 0; str[i]; i++) { if(str[i] == ' '){ strlen += 2; } } for(i = length-1; i >= 0; i--) { if(str[i] != ' ') { str[strlen-1] = str[i]; strlen--; } else { str[strlen-1] = '0'; str[strlen-2] = '2'; str[strlen-3] = '%'; strlen-=3; } } }
相关文章推荐
- 剑指offer-面试题4 - 替换空格
- 剑指offer-----替换空格
- 剑指Offer 2.替换空格
- 剑指offer——题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 剑指Offer面试题4替换空格
- 剑指Offer:替换空格
- 剑指offer面试题4 替换空格
- 剑指offer 4题 【字符串】替换空格
- 剑指offer2 替换空格
- 【剑指Offer面试编程题】题目1510:替换空格--九度OJ
- 剑指OFFER-替换空格
- 剑指Offer——替换空格
- 【剑指offer】替换空格
- 【剑指offer】第四题 替换空格
- 剑指offer——字符串替换空格
- 剑指offer---替换空格
- 剑指offer-面试题04-替换空格
- 剑指offer--面试题5:替换空格
- 剑指offer例题4—替换空格
- 牛客网-剑指Offer-替换空格