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;
            }
    	}
    };
    
  • 相关阅读:
    POJ2355 Railway tickets DP优化
    POJ3280 Cheapest Palindrome 区间DP
    POJ2352 Stars 线段树
    适牛的类岛娘头文件<转载>
    Ural 1519 Formula 1 插头DP(单回路)
    POJ3345 Bribing FIPA 树形DP+分组背包
    6个变态的C语言HelloWorld程序<转载>
    POJ2374 Fence Obstacle Course DP+线段树优化
    POJ3133 Manhattan Wiring 插头DP
    ACdream 完美数 数位DP
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6756457.html
Copyright © 2011-2022 走看看