题目描述

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

最直接的方式,直接使用 STL。假设字符串的长度是n,那么对于每个空格字符,需要移动后面 o(n) 个字符,因此对含有 o(n) 个空格字符的字符串而言时间复杂度为 o(n2),过高了。代码如下:

class Solution {
public:
string replaceSpace(string str) {
size_t ix = 0;
while (ix < str.size()) {
if (str[ix] == ' ') {
str.replace(ix, 1, "%20");
ix += 3;
} else {
ix++;
}
}
return str;
}
};

比较好的方式,是从后往前移动,如此的时间复杂度是 o(n) 。来看代码:

class Solution {
public:
string replaceSpace(string str) {
if (str.empty()) {
return str;
} int preSize = str.size();
// 统计空格数量
int spaceCnt = 0;
for (const auto &character : str) {
if (character == ' ') {
spaceCnt++;
}
} // 为str重新分配空间
int curSize = preSize + (3 - 1) * spaceCnt;
str.resize(curSize); // 替换
int prePos = preSize - 1;
int curPos = curSize - 1;
while (prePos >= 0) {
if (str[prePos] == ' ') {
str[curPos--] = '0';
str[curPos--] = '2';
str[curPos--] = '%';
} else {
str[curPos--] = str[prePos];
} prePos--;
} return str; }
};

[NewCode 4] 替换空格的更多相关文章

  1. 剑指Offer面试题:3.替换空格

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

  2. 剑指Offer 替换空格

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

  3. 剑指Offer:面试题4——替换空格(java实现)

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

  4. 【面试题004】c/c++字符串,替换空格

      一,c/c++字符串 1.C/C++中每个字符串都以字符’\0‘作为结尾,这样我们就能很方便地找到字符串的最后尾部. 由于这个原因每个字符串都有一个额外的开销,注意字符串越界的问题: 2.C/C+ ...

  5. 【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

    //字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void ...

  6. 剑指offer-面试题4.替换空格

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

  7. 剑指offer编程题Java实现——替换空格

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

  8. 【剑指offer】04替换空格,C++实现

    0.前言 # 替换空格为字符串部分的题目,剑指offer中字符串系列的文章地址,剑指offer全系列文章地址 1.题目 # 请实现一个函数,将一个字符串中的空格替换成"%20".例 ...

  9. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

随机推荐

  1. Eclipse的下载及安装

    Eclipse的下载地址: https://www.eclipse.org/downloads/ 下载完成后,双击安装包即可安装 选择 Eclipse IDE for Java EE Decelope ...

  2. spring.boot mybaits集成

    https://www.cnblogs.com/pejsidney/p/9272562.html (insertBatch批量插入) 第一篇博客循环部分有错误,参照下面的例子去更改 List<S ...

  3. 【UI测试】--独特性

  4. mysqldb mysql_config

    在安装mysqldb Python的时候会用到mysql_config,但是正常安装的MySQL环境下是没有这个文件的,这个文件在Linux下是可执行文件,所以需要到mysql官方网站上下载MySQL ...

  5. ATM自动取款机程序感想

    上周四的Java考试,老师并没有我们考暑假给我们布置的样卷的java程序,而是让我们做一个设计ATM的程序,然而这个对于我们来说好难,因为暑假没有学好java,首先基础知识还没有掌握,输入数据一开始都 ...

  6. JVM 中知识

    1.栈:(stack) 存放的都是方法中的局部变量 方法的运行一定要在栈当中 局部变量:方法参数,方法{}内部的变量 作用域:一旦超出作用域,立刻从栈中消失 2.堆:(heap) 凡是new出来的东西 ...

  7. OpenCV+VisualStudion2017配置

    1.创建工程 Ctrl+Shift+n 2.创建.cpp文件 Ctrl+Shift+a 3.打开属性管理器 视图->其他窗口->属性管理器 Debug64右键 属性 4.添加包含目录 VC ...

  8. vue中使用promise.all发送多个请求

    1.创建两个promise,在promise中使用axios 2.调用Promise.all([p1,p2]).then(res=>{}).catch(err=>{})方法 代码如下: & ...

  9. java常用设计模式十二:命令模式

    一.概述 定义:命令(Command)模式又叫作动作(Action)模式或事务(Transaction)模式,是一种对象的行为模式.将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对 ...

  10. php 获取当前在线用户数量

    <?php //在线人数统计 $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinet ...