《剑指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——替换空格

1. 问题描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 2. 解答思路对于这一题...

剑指offer--替换空格

题目:实现一个函数,把字符串中的每个空格替换成”%20”,例如输入”we are happy”则输出”we20%are20% happy”; 常规的思路: 我们遍历这个字符串,没遇到一个空格的时候...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

剑指offer--替换空格

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

【剑指offer】替换空格

Java算法面试必看宝典《剑指offer》题目思路分析及实现代码。

剑指offer--替换空格

替换空格 书上给出的代码: // ReplaceBlank.cpp : Defines the entry point for the console application. // ...

【剑指offer】替换空格

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

剑指offer--替换空格

请实现一个函数,把字符串中的每个空格替换成%20.例如:输入"We are happy." 输出"we are%20are%20happy."。 要想实现这个函数,我们最容易想到的是,从头往前遍历,...

剑指offer--空格替换

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

剑指offer:替换空格

题目:请事先一个函数,把字符串中的每个空格替换成“%20”,例如我们输入“I am happy”,输出 "I%20am%happy"。 要求:在原字符串上进行替换操作,且时间复杂度为O(n)。 基本思...

剑指offer 替换空格

题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。代码#include #include #...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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