1.题目

# 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 2.思路

# 从头到尾遍历字符串做替换,时间复杂度为O(n2),效率低

# 从尾到头遍历字符串做替换,时间复杂度为O(n),效率高

 3.举例(从尾到头遍历字符串)

# 边界检查,判断字符数组是否为空

# 遍历字符串,统计空格总数count_space,统计替换前字符个数count_old,统计替换后字符个数count_new,其中count_new = count_old + 2*count_space

# 边界检查,判断字符数组是否越界

# 替换空格,用指针P1指向原始字符串的末尾,指针P2指向替换后字符串的末尾。向前移动指针P1,如果P1指向的元素不是空格,则将P1指向的元素复制给P2指向的位置;如果P1指向的元素是空格,则P2依次向前移动并插入%20。当P1==P2时,结束替换。

4.code

# C++字符数组存储字符串,字符数组中编译器自动添加字符串的结束标识’\0’,字符串结束标识在字符数组中占一个位置,注意字符数组的越界问题。

 class Solution {
public:
// 指向字符数组的字符指针str,字符数组长度length
void replaceSpace(char *str,int length) { // 边界检查1:判断字符数组是否为空
if(str==NULL)
return ;
// 遍历字符串,统计空格个数、替换前字符个数、替换后字符个数
int CountOfBlanks=0; // 空格个数
int Originallength=0;// 替换前字符个数
int len=0; // 替换后字符个数 for(int i=0;str[i]!='\0';++i)
{
Originallength++;
if(str[i]==' ')
++CountOfBlanks;
} len =Originallength+2*CountOfBlanks; // 边界检查2:判断字符数组是否越界
if(len+1>length)
return ; // 替换空格
char*pStr1=str+Originallength;// 字符指针指向原始字符串的末尾
char*pStr2=str+len; // 字符指针指向替换后字符串的末尾 while(pStr1 != pStr2) // 替换结束的条件
{
if(*pStr1==' ')
{
*pStr2--='0';
*pStr2--='2';
*pStr2--='%';
}
else
{
*pStr2--=*pStr1;
}
--pStr1;
}
}
};

【剑指offer】04替换空格,C++实现的更多相关文章

  1. 《剑指offer》替换空格

    本题来自<剑指offer> 替换空格 题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are% ...

  2. 菜鸟刷题路:剑指 Offer 05. 替换空格

    剑指 Offer 05. 替换空格 class Solution { public String replaceSpace(String s) { StringBuilder str = new St ...

  3. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

    第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...

  4. 【Java】 剑指offer(4) 替换空格

    本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 请实现一个函数,把字符串中的每个空格替换成"%20&quo ...

  5. 剑指offer——03替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   注意事项: <剑指o ...

  6. Go语言实现:【剑指offer】替换空格

    该题目来源于牛客网<剑指offer>专题. 请实现一个函数,将一个字符串中的每个空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串 ...

  7. 剑指offer:替换空格

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

  8. 剑指Offer 2. 替换空格 (字符串)

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 题目地址 https://ww ...

  9. 【剑指offer】替换空格

    一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.思路: Python代码,先 ...

  10. 剑指offer之 替换空格

    package Problem4; public class ReplaceBank { /* * 题目描述: 请实现一个函数,将字符串的每个空格替换为"%20". * 例如输入& ...

随机推荐

  1. javascript函数创建

    函数声明 function add(a,b){ return a+b } 函数表达式 <!--一般函数表达式--> var add = function(){ } <!--立即声明函 ...

  2. vs2005配置OpenCv2.3.1

    编译OpenCv 1 用CMake导出VC++项目文件 运行cmake-gui,设置where is the source code路径为OpenCV安装路径(本文档假定安装位置为:c:\OpenCV ...

  3. PhpStudy 升级 MySQL 版本到5.7

    1:备份当前数据库数据. 最好是导成 SQL 文件 2:备份 PhpStudy 下的 MySQL 文件夹.以防升级失败.还可以使用旧版本的数据库 3:下载MySQL5.7.解压.然后放在 PhpStu ...

  4. 在 ios 中的日期格式

    var d="2017-1-1" ; new Date(d) //生成一个日期对象 这样写在 Android 中没有问题,但是在 ios 中,d  的格式不对,应该设为 2017- ...

  5. MySQL中, 如何查询某一天, 某一月, 某一年的数据.

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天(包括昨天和今天的数据) SELECT * FROM 表名 WHERE TO_ ...

  6. nodejs爬虫笔记(一)---request与cheerio等模块的应用

    目标:爬取慕课网里面一个教程的视频信息,并将其存入mysql数据库.以http://www.imooc.com/learn/857为例. 一.工具 1.安装nodejs:(操作系统环境:WiN 7 6 ...

  7. 谈一谈jQuery核心架构设计(转)

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  8. Android图像数据传递到C++的一些坑

    最近在做一个Android图象识别的app, 通过相机预览或者是拍照功能获取图像数据,然后将图像数据传递到本地C++的图像识别so库.在这个过程中花的时间最多的就是数据传输问题.谨以此坑,警示未来!  ...

  9. 浅谈最大流的Dinic算法

    PART 1 什么是网络流 网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关.网络流的理论和应用在不断发展,出现了具有增益的流.多终端流.多商品流以及网络流的分解与 ...

  10. 结合apache安装subversion

    ########下载源代码包##########wget http://subversion.tigris.org/downloads/subversion-1.6.15.tar.gz;wget ht ...