题目:

请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“We are happy”,则输出“We%20are%20happy”。

思路:

背景:

在网络编程中,如果URL参数中含有特殊字符,如空格,#等,导致服务器端无法获得正确的参数值,我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则就是在‘%’后面跟上ASCII码的两位十六进制的表示,比如空格的ASCII码是32,即十六进制的)0x20,因此空格被替换为“%20”。

方法:

1、假设可以开辟新的空间。

 创建一新字符串,并在新字符串上面做空格替换。

 时间复杂度:O(n),空间复杂度:O(n)

2、假设不能开辟新的空间,且原字符串长度足够。

  • 从头到尾扫描字符串,每遇到空格字符时做替换,将1个字符替换为3个字符,因此空格后面的字符需要后移两个字符。

  时间复杂度:O(n^2),空间复杂度:O(0)

  • 从尾向头扫描字符串,每遇到空格字符时做替换,无需后移字符。首先遍历一遍字符串,统计字符串中空格的个数,并计算替换后字符串的总长度,每替换一个空格,长度增加2.替换时,准备两个指针P1,P2分别指向原始字符串的末尾和替换后字符串的末尾,依次移动指针P1,遇到空格做替换,直至P1和P2相遇,即前面不再有空格出现。

  时间复杂度:O(n),空间复杂度:O(0)

代码:

#include <iostream>using namespace std;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;if(string[i]==' ')++numberOfBlank;++i;}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--]='%';}elsestring[indexOfNew--]=string[indexOfOriginal];--indexOfOriginal;}
}int main()
{char sentence[100]="We are happy!";ReplaceBlank(sentence,100);cout << sentence << endl;return 0;
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/4060ac7e3e404ad1a894ef3e17650423?rp=1

AC代码:

class Solution {
public:string replaceSpace(string str) {int originalLength=0;int numberOfBlank=0;int i=0;while(str[i]!='\0'){++originalLength;if(str[i]==' ')++numberOfBlank;++i;}int newLength=originalLength+numberOfBlank*2;//if(newLength>length)//    return;int indexOfOriginal=originalLength;int indexOfNew=newLength;while(indexOfOriginal>=0 && indexOfNew>indexOfOriginal){if(str[indexOfOriginal]==' '){str[indexOfNew--]='0';str[indexOfNew--]='2';str[indexOfNew--]='%';}elsestr[indexOfNew--]=str[indexOfOriginal];--indexOfOriginal;}return str;}
};

转载于:https://www.cnblogs.com/AndyJee/p/4623763.html

(剑指Offer)面试题4:替换空格相关推荐

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

    https://blog.csdn.net/yanxiaolx/article/details/52235212 题目:请实现一个函数,把字符串中的每个空格替换成"%20".例如输 ...

  2. 剑指Offer - 面试题5. 替换空格(字符串)

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

  3. 剑指offer面试题05. 替换空格

    题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 思路 详见链接 在 Python 和 Java 等语言中,字符串都被设计成不可变的类型,即无法直接修改字符串 ...

  4. leetcode刷题之 剑指offe 面试题05. 替换空格 犯傻记录

    2020.3.6 刷到剑指offer第5题,题目描述如下: 题目本身没啥好说的,就是先统计空格的个数,然后把长度增加,用两个指针从后往前插. 采用m = s.count(' ',0,len(s)-1) ...

  5. 剑指offer习题详解——替换空格(全网最全详细解答,多种语言,多种解法)

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

  6. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  7. 剑指offer——面试题4:替换空格

    #剑指offer--面试题4:替换空格 此题的关键思路在于字符串的从后向前复制!!! class Solution { public:void replaceSpace(char *str,int l ...

  8. 剑指offer——面试题49:把字符串转换成整数

    剑指offer--面试题49:把字符串转换成整数 Solution1: 代码写的啰嗦,但思路清晰..LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案 class Soluti ...

  9. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  10. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

最新文章

  1. Android获取屏幕尺寸大小
  2. 实录分享 | 计算未来轻沙龙:揭秘AutoML技术(视频 + PPT)
  3. 蓄电池单格电压多少伏_12v电瓶充满电多少伏正常
  4. 简单的聊天应用程序(多客户端聊天服务器) from multithread
  5. 23种设计模式(十)对象创建之构建器
  6. 求一个数因数个数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  7. 问卷调查微信小程序源码
  8. 三星s9 android p内测,三星开启国行Galaxy S9/S9+安卓9.0内测,限额一万名!
  9. 条件随机场Conditional Random Field,CRF、隐马尔可夫模型Hidden Markov Model,HMM、马尔可夫随机场、马尔可夫性质傻傻分不清楚?帮你理理关系
  10. java 根号x_Java-求根号n
  11. 2020计算机行业就业职位及分析
  12. 【控制篇 / 应用】(5.6) ❀ 01. NGFW 模式下使用应用控制 ❀ FortiGate 防火墙
  13. openwrt procd启动流程和脚本分析
  14. 计算方法-数值积分与微分
  15. clickhouse PARTITION操作
  16. aardio - 【库】webp图片转换
  17. 未来机器人会有多“可怕”,这些技术已经有所体现
  18. C# wave mp3 播放器探寻
  19. 信息安全咨询服务内容
  20. IP 获取和 IP定位

热门文章

  1. ios点击大头针气泡不弹出_iOS高德地图之自定义大头针and泡泡view
  2. 【H.264/AVC视频编解码技术】第四章【SPS序列参数集】
  3. c# 字典排序_Python零基础入门之列表与字典
  4. C语言变量定义和赋值
  5. linux history文件路径,Linux、Unix常用命令(文件和目录相关)
  6. java怎么兼容switch_java – Switch语句给出了不兼容类型错误
  7. 纯净pe工具_微PE工具箱2.0
  8. 【渝粤教育】国家开放大学2018年春季 0004-22T有机合成单元反应 参考试题
  9. 【渝粤教育】21秋期末考试财务管理10164k2
  10. [渝粤教育] 西南科技大学 建筑制图 在线考试复习资料