今天看题的时候,遇到一个替换空格的题目,分析一下哈。

题目要求:把字符串中的每个空格替换成“%20”。例如输入“we are happy”,则输出“we%20are%20happy”。

解题思路:我们首先想到的是:移位思想。遇到空格就将空格后的所有字符后移两位,然后填充空格为%20。

实现代码

#pragma once
#include<assert.h>
#include<string.h>char* StrReplace(char* str,size_t length)
{assert(str && length > 0);char *p = str;char *p1 = str;size_t len = strlen(str)+1;size_t i = len;while(p){while(*p != ' '){p++;if(*p == '\0'){return str;}}while((p1+i) != p){*(p1+i+1) = *(p1+i-1);i--;}len+=2;i = len;*p = '%';*(p+1) = '2';*(p+2) = '0';p+=2;}return str;
}void Test()
{char str[20] = "we are happy";cout<<StrReplace(str,20)<<endl;
}

但是,我们再看看它的时间复杂度哈。显然,每次移位操作都是O(N),这样经过多次移位,使它的时间复杂度就变为O(N^2)。这样的效率实在有点低。我们如何提高它的时间复杂度呢?

思路2:我们可以用计数的方式,统计字符串中总共的空格数,然后从后向前移位,使用两个指针,p1指向字符串开始的位置,p2指向字符串尾部,移位将p2移动2*空格个数位,遇到空格后填充,直到两指针相遇,才停止移位。如图所示(移位过程):

实现代码

#pragma once
#include<assert.h>
#include<string.h>
char* StrReplace(char* str,size_t length)
{assert(str && length > 0);char *p = str;char *p1 = NULL;char *p2 = NULL;size_t len = strlen(str);int count = 0;//统计空格数while(*p != '\0'){if(*p == ' ')count++;p++;}count*=2;p1 = str+len;        //指向字符串尾p2 = str+len+count;  //指向修改后字符串正确的位置while(p1 != p2){if(*p1 == ' '){p2 -= 2;*p2 = '%';*(p2+1) = '2';*(p2+2) = '0';if(p1 != p)    //如果p1没有到字符串头时再减,防止越界{p1--;p2--;}}else              //不是空格则直接后移{*p2 = *p1;p1--;p2--;}}return str;
}void Test()
{char str[20] = "we are happy";cout<<StrReplace(str,20)<<endl;char str1[20] = " are happy";cout<<StrReplace(str1,20)<<endl;
}

执行结果

[剑指Offer]替换空格相关推荐

  1. 剑指Offer 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 替换空 ...

  2. python剑指offer替换空格_《剑指offer》2-替换空格【Java+Python】

    替换空格 1. 题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 2. 示例 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%2 ...

  3. python剑指offer替换空格_迷人的算法-剑指offer面试题5:替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成"%20". 例如,输入"We are happy.",则输出"We%20are%20happy.&q ...

  4. [剑指offer] 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 刚开始用rep ...

  5. python剑指offer替换空格_02_替换空格【python】

    1.题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.思 ...

  6. 剑指offer 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. java  解 ...

  7. python剑指offer替换空格_《剑指Offer》字符串 替换空格

    //str.replace(char oldChar,char newChar);用字符newChar替换oldChar;返回一个新的字符串 public class Solution { publi ...

  8. 剑指Offer替换空格问题

    1.题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.代 ...

  9. 【模拟遍历】剑指offer:替换空格

    请实现一个函数,将一个字符串s中的每个空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 定义res,遍历 ...

最新文章

  1. Sql server Insert执行的秘密(下) 带外键的INSERT分析
  2. 第十、十一周项目一-点-圆-圆柱类族的设计(1)
  3. python第三方库安装-python的第三方库安装
  4. [CS101] 转载:浅议Fibonacci(斐波纳契)数列求解
  5. feign 第一次调用超时_feign + hystrix 降级
  6. 《团对-学生成绩管理-开发环境搭建过程》
  7. SQLi LABS Less-8
  8. 底层实现红黑树_【单选题】下列数据结构中,哪一个是ArrayList类的底层实现( ) A. 数组结构 B. 链表结构 C. 哈希表结构 D. 红黑树结构...
  9. ABP框架系列之四十九:(Startup-Configuration-启动配置)
  10. ABAQUS 转子动力学载荷
  11. 设计模式之----依赖倒置(Dependency inversion principle)的理解
  12. oracle中同义词的用法,Oracle中定义以及使用同义词的方法
  13. Brightest Immaculate Teresa(简单题)(北理16校赛)
  14. 3dmaxobj导出选项_怎么解决在3dmax中导出obj没有贴图的问题?
  15. sre_constants.error: unbalanced parenthesis
  16. kettle MongoDB数据迁移至Hbase
  17. 试用期没到辞职有工资吗?
  18. Python实现布林带策略
  19. linux fcitx改mac输入法,Linux安装fcitx输入法
  20. windows下最强大的SSH连接软件

热门文章

  1. [Swift]LeetCode86. 分隔链表 | Partition List
  2. codeforces 703B
  3. mybatis.net - 5 嵌入资源与引用资源
  4. 如何解决EDM邮件营销中的图片难题
  5. JavA持有类_关于继承:Java持有对象的超类的类型
  6. aws ec2时间_AWS中自动化的三大领域,以避免支付过多的云账单
  7. 基于混沌的图像置乱加密算法及matlab的实现,基于混沌的图像置乱加密算法及MATLAB的实现...
  8. 微pe工具箱是微软的吗_微PE工具箱V2.0更新10内核
  9. java none怎么用tomcat_使用tomcat做java中间件
  10. 《MySQL——使用联合索引、覆盖索引,避免临时表的排序操作》