题目:

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

以下代码都是通过PHP代码实现。

拿到这个题目。我们第一反应就是使用内置php函数str_replace。

解法1:使用PHP内置函数

 str_replace(" ","%20",$string);

解法2:从头遍历替换

算法:时间复杂度是O(n^2).

我们不用php内置函数。然后自己通过php实现。则容易想到的是从头遍历字符串数组。然后遇到空格,就把后面的字符整体往后移动2格。把整体length加2.

如上图所示。我们逐次遍历。遇到空格。把wold 整体往后移动2格。然后替换%20. PHP代码实现如下。

 function strReplace($string){
if(empty($string)) {
return $string;
}
$length = strlen($string); //源字符串长度 //遍历字符数组
for ($i=0; $i < $length; $i++) {
if($string[$i] == ' ') {
//当前字符是空格。将后面的字符整体往后移动2格,从后往前移动。
for ($j=$length-1; $j > $i ; $j--) {
$string[$j+2] = $string[$j];
}
$string[$i] = '%';
$string[$i+1] = '2';
$string[$i+2] = '0';
//每次替换完,字符串长度加2。如果不加2 遍历到源字符串长度就是结束。目标字符串长度是大于源字符的。
$length = $length+2;
}
}
return $string; }

解法3:从后往前替换

算法时间复杂度:O(n)

我们可以尝试从后面往前替换。我们先算出最终字符串的长度。然后来从最终字符串的后面来比较。

大大减少了字符串数组移动的次数

PHP代码实现如下

 function strReplace($string){
if(empty($string)) {
return $string;
}
$length = strlen($string); //源字符串长度
$spaceLenth = 0;//空格个数
//获取空格的长度
for ($i=0; $i < $length; $i++) {
if($string[$i] == ' ') {
$spaceLenth++;
}
}
if($spaceLenth == 0) {
return $string;
}
//目标字符串的长度。一个空格替换后,目标长度加2。N个空格,则增加2*N
$totalLen = 2*$spaceLenth+$length;
$length--;
$totalLen--;
while ($length >=0 && $length < $totalLen) {
if($string[$length] == ' '){
$string[$totalLen--] = '0';
$string[$totalLen--] = '2';
$string[$totalLen--] = '%';
}else{
//移动字符串
$string[$totalLen--] = $string[$length];
}
$length--;
}
return $string;
}

思考:

当我们在查找替换一个字符的时候。可以选择逆向替换。来减少移动的次数。

【剑指Offer学习】【面试题4 : 替换空格】的更多相关文章

  1. 【剑指offer】面试题 5. 替换空格

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

  2. 《剑指offer》面试题4 替换空格 Java版

    (给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成'%' '2' '0'三个字符,原字符段由'\0'结尾) 书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动.如果不移动元素 ...

  3. 【剑指Offer】面试题05.替换空格

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

  4. 《剑指offer》面试题05. 替换空格

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

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

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

  6. 《剑指Offer》面试题5-替换空格

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

  7. 剑指Offer(书):替换空格

    题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析:通常来说,这样的题有两种方式 ...

  8. 剑指offer笔记面试题5----替换空格

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

  9. 【剑指Offer学习】【全部面试题汇总】

    剑指Offer学习 剑指Offer这本书已经学习完了.从中也学习到了不少的东西,如今做一个总的文件夹.供自已和大家一起參考.学如逆水行舟.不进则退.仅仅有不断地学习才干跟上时候.跟得上技术的潮流! 全 ...

  10. 【剑指Offer学习】【所有面试题汇总】

    剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退.只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代 ...

随机推荐

  1. 小梦词典WP8.1应用发布

    这几天一直在做这款应用,今天终于发布了! 小梦词典简介: 小梦词典是一款永久免费无广告的网络词典. 支持英汉单词查询: 支持中,英,法,韩,德,俄,日七国语言翻译,多语言极致体验: 支持生词本记忆,查 ...

  2. js进阶 11-8 jquery如何获取元素相对于父元素的位置

    js进阶 11-8  jquery如何获取元素相对于父元素的位置 一.总结 一句话总结:用jquery的position方法,但是使用这个方法的前提是父元素相对定位,子元素绝对定位,否则和offset ...

  3. SVN入门图解教程(超详细)

    SVN入门图解教程(超详细) 一.总结 一句话总结: 二.SVN入门教程 1. 什么是SVN SVN全名Subversion,即版本控制系统.SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操 ...

  4. 小强的HTML5移动开发之路(33)—— jqMobi基础

    一.什么是jqMobi jqMobi是由appMobi针对HTML5浏览器和移动设备开发的javascript框架,是个极快速的查询选择库,支持W3C查询. 版本 jqMobi源码最初在2012年1月 ...

  5. 【b504】等价表达式(NOIP2005第4题)

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数 ...

  6. 解析字典包含关键字比如ID,description等,MJExtension 框架 不能直接设置变量与其同名。

    @property (nonatomic,strong) NSString *descrip;  //设置变量名 _DataReceived=(NSMutableArray *)[HZnewsmess ...

  7. JAVA自带API的压缩与解压

    Java API中的 java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作.我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile j ...

  8. wxWidgets初学者导引(2)——下载、安装wxWidgets

    wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith ...

  9. Codeforces 85B. Embassy Queue【段树、馋】

    标题效果: 每个人都应该申请签证必须向大使馆3种程序,而这3个步骤做的顺序是固定的.通过各种形式的手续给出多少,它需要对每个过程的处理时间,有多少人会来办理手续,什么时间来.要求的是全部人分别在大使馆 ...

  10. textarea随内容自动增加高度

    var autoTextarea = function (elem, extra, maxHeight) { extra = extra || 0; var isFirefox = !!documen ...