《剑指offer》——替换空格

原创 2016年05月30日 22:50:26

题目描述

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

分析:这道题如果允许开辟一个新的数组,我们只需要从头开始扫描原数组中的每个字符,
1)若字符非空格则复制字符到新数组中,
2)若字符为空格则在新数组中填充“%”,“2”,”0”三个字符,
3)继续扫描重复以上操作。

难点在于如果不允许开辟新的数组空间,替换发生在原数组上,我们要做的是将1个字符替换为3个字符,且替换位置后面的字符不能被覆盖。下面我们以题目中的例子看一下字符串在内存中的存储,每个格子存储一个字符
1 W e   a r e   h a p p y . \0          
2 W e % 2 0 a
r e   h a p p y . \0      
3 W e % 2 0 a r t % 2 0 h a p p y . \0  
第一行代表原字符串,后面两行代表两次替换操作完成整个字符串的替换,其中2在1的基础上以红色字体为基准后面的字符都向后移动2位,3在2的基础上以红色字体为基准后面的字符又都向后移动2位,而相对于1移动了4位。

初级想法:1)从头开始扫描数组,遇到空格,先将空格后面的字符做依次向后移动2位操作,然后填充"%","2","0",三个字符,记下填充后的下一个位置,
    2)从这个位置接着扫描字符串,遇到空格做和上面同样的操作;
3)直到所有空格都被替换。

想法进阶:这样一次一次的移动是不是太麻烦了呢,如果我们知道每个字符需要移动的位数,那么是不是每个字符通过一次移动就可以到达它在目标字符串的位置呢,时间复杂度也大大降低了呢。

算法思路:从字符串的后面开始复制和替换,首先准备两个指针,p1和p2,p1指向原始字符串的末尾,p2指向替换后字符串的末尾,接下来,向前移动指针p1,逐个把它指向的字符复制到p2,碰到一个空格之后,把p1向前移动1格,在p2处插入字符串“20%”,由于“20%”长度为3,同时也要把p2向前移动3格。直到p1=p2,表明所有空格都已经替换完毕。

在牛客的《剑指》中java实现要求传入的参数是StringBuffer类型的,那么问题就简单多了。。。。
public class Solution {
    public String replaceSpace(StringBuffer str) {
        for(int i=0; i<str.length(); i++)  
              {  
              char temp = str.charAt(k);  
                   if(temp == ' ')  
                     {  
                      str.replace(k, k+1, "%20");  
                     }  
              }  
           
        return str.toString(); 
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

【剑指offer】-替换空格

题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解析:如果从前往后替换字符串中的空格,...
  • Kevin_zhai
  • Kevin_zhai
  • 2015年11月02日 15:04
  • 1070

剑指offer面试题:替换空格(将字符串每个空格替换为%20)

题目:请实现一个函数,把字符串的每个空格替换成“%20”。例如:输入:“we are happy.”,则输出:“we%20are%20happy.” 这里考虑的是在原来的字符串上做替换这一种情况: ...
  • L_XRUI
  • L_XRUI
  • 2016年06月15日 21:41
  • 970

剑指offer(C++)——替换空格

题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路:简单暴力解法,从...
  • YF_Li123
  • YF_Li123
  • 2017年04月21日 17:08
  • 534

剑指offer--替换空格

记录《剑指offer》上的算法题。完整的代码例子可以在我的Github。这是一道有关字符串的问题。首先在C/C++中,会把常量字符串放到单独的一个内存区域中,当几个指针赋值给相同的常量字符串时,它们实...
  • lc013
  • lc013
  • 2016年12月07日 16:01
  • 135

剑指Offer,面试题4,替换空格,Java写法

题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路就是如果从左到右去插入的话,时间复杂...
  • u012162920
  • u012162920
  • 2016年08月15日 17:21
  • 247

剑指Offer面试题4(Java版),替换空格

题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy",则输出”We%20are%20happy". 原因:在网络编程中,如果URL参数中含有特殊字符,如:空...
  • jsqfengbao
  • jsqfengbao
  • 2015年07月24日 17:58
  • 1942

剑指offer:替换空格(java)

面试题:替换空格(假设在原来的字符串上替换,并且保证输入的字符串后面有足够多的内存空间) 题目:请实现一个函数,把字符串中的每个空格替换成“20%”。例如输入“hellow new world!”,...
  • abc7845129630
  • abc7845129630
  • 2016年09月29日 10:06
  • 250

剑指offer 算法2 替换空格(python)

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。...
  • yehan36
  • yehan36
  • 2017年08月29日 19:34
  • 143

【剑指Offer】替换空格

题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路遍历字符串,遇到空格,就把空格...
  • zgljl2012
  • zgljl2012
  • 2015年09月16日 19:49
  • 1606

python实现剑指offer系列2:字符串空格替换

牛客网题目链接:https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=...
  • shizhengxin123
  • shizhengxin123
  • 2017年07月09日 14:49
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《剑指offer》——替换空格
举报原因:
原因补充:

(最多只允许输入30个字)