zoukankan      html  css  js  c++  java
  • 字符串中的空格替换


    • 题目描述:

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

    • 分析:

      首先,还是想到简单、原始的方法,从头到尾扫描字符串,遇到每遇到一次空 格,先将空格之后的所有元素移动两个字节,然后将空格替换成”%20“。显然这种方法需要大量移动字符。假设字符串的长度是n,每遇到一个空格,需要移动O(n)个字符,因此对含有O(n)个空格的字符串而言,时间复杂度为O(n^2)。
      时间复杂度为O(n)的解法:
      首先遍历一次字符串,这样就可以得到字符串的长度originallength,并统计出其中空格字符的个数space,相加得到替换后的字符串长度newlength。然后定义两个指针P1、P2,分别指向原字符串的最后一个元素(注意,字符串的长度中不包含'',但实际上它也占一位),接下来就可以向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,同时也将P2向前移动一位。当碰到空格的时候,把P1向前移动一位,将“%20”插入P2之前的三位,并将P2向前移动三位。重复此过程,直到P2和P1指向同一位置时,表明所有空格都已替换完毕。

    class Solution {
    public:
    	void replaceSpace(char *str,int length) {
            if(str == NULL || length <= 0)
                return;
            int originallength = 0;
            int space = 0;
            for(int i = 0; str[i] != '';++i){
                ++originallength;
                if(str[i] == ' ')
                    ++space;
            }
    		//将空格替换成“%20”后,每有空格,则长度比原来增加2
            int newlength = originallength + space * 2;
            if(length < newlength + 1)
                return;
            int p1 = originallength;
            int p2 = newlength;
            while(p1 >= 0 && p2 > p1){
                if(str[p1] == ' '){
                    str[p2--] = '0';
                    str[p2--] = '2';
                    str[p2--] = '%';
                }
                else{
                    str[p2--] = str[p1];
                }
                --p1;
            }
    	}
    };
    
  • 相关阅读:
    Shell使用
    从一道面试题谈linux下fork的运行机制
    老了,问题定位难了,xml编码解析
    javacc
    C++概述
    Notepad++中设置Windows、Unix、Mac三种行尾换行符格式间的转换
    玩转html5(一)-----盘点html5新增的那些酷酷的input类型和属性
    Java Drp项目实战—— 环境搭建
    cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检測
    电话拨号盘(带触摸振动反馈)
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6756457.html
Copyright © 2011-2022 走看看