212. 空格替换

设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。
你的程序还需要返回被替换后的字符串的长度。

注意事项

如果使用 Java 或 Python, 程序中请用字符数组表示字符串。
样例
对于字符串"Mr John Smith", 长度为 13
替换空格之后,参数中的字符串需要变为"Mr%20John%20Smith",并且把新长度 17 作为结果返回。

先扩充,从后往前处理

这个说是字符串,实际上是字符数组,并没有用c++STL的string来做,要是那样就太简单了,因为string本身支持+操作,只要遍历遇到空格用%20代替加上就可以了,如果是字符数组的话就难一些。
容易想到的还是去遍历,遇到空格用%20来代替,从前向后遍历的话有一个问题,就是一个空格的地方放不下三个字符,要不先把后面的两个字符另外存起来,要不就会丢失数据,而且存起来是很麻烦的,因为要插入这个数据。
还有一种方法是:新建一个字符数组,然后逐个去放,但是这个题要求原位处理,所以不行。

所以一个可行的思路是把原数组扩大,扩大的容量可以通过检查空格的个数来定,然后用两个指针,从后往前把字符放进去,遇到空格则连续放入%20,因为是从后往前,所以不会出现数据没有地方放的情况。画了个简单的图来说明每一步操作的结果。


其中blank_count是记录当前还有多少个空格没有遍历,这个量可以帮助我们找到要写入的字符的位置。而且每次处理完一个这个blank_count--。具体的处理细节见代码:

int replaceBlank(char string[], int length) {
        int blank_count=0;
        int new_length=length;
        for(int i=0;i<length;i++)
        {
            if(string[i]==32)
            blank_count++;
        }
        new_length+=blank_count*2;
        
        for(int i=length-1;i>=0;i--)
        {
            if(string[i]!=32)                   //如果不是空格,就把这个值放进去,从后往前
            {
                string[i+2*blank_count]=string[i];
            }
            else                                //如果是空格,则需把空格替换成三个字符`%20`
            {
                string[i+2*blank_count]='0';
                string[i+2*blank_count-1]='2';
                string[i+2*blank_count-2]='%';
                blank_count--;            //这个见1,则下次的遍历就会减3,因为这个要乘以2,再加上i要减一。
            }
            
        }
        return new_length;
        
        // write your code here
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看到18%通过率的简单题,发现事情没那么简单。 题目 描述:设计一种方法,将一个字符串中的所有空格替换成 %20 ...
    Leoshi阅读 497评论 0 0
  • 描述 设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得...
    6默默Welsh阅读 233评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 总有同学说,某某科目听不懂,所以很郁闷。 也总有人说,上个好大学不如有个好爹。 所以在很多问题上,我们总是在强调客...
    陈士武阅读 558评论 1 1
  • 轻量级Java Web整合开发 第一章轻量级Java Web开发概述 1.2 java web开发概述 1.JSP...
    张中华阅读 1,291评论 0 6