zoukankan      html  css  js  c++  java
  • 4-替换空格

    问题描述: 请实现一个函数,把字符串的每个空格替换成"%20"。例如,输入"We are happy", 则输出"We%20are%20happy"

    • O(n^2)从前向后替换。从头到尾扫描字符串,每次碰到空格字符的时候进行替换。假设字符串的长度是n,对每个空格字符,需要移动后面O(n)个字符,因此对于含有O(n)个空格字符的字符串而言,总的时间效率是O(n^2)
    • O(n) 从后往前替换。先统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。然后从字符串的后面开始复制和替换,首先准备两个指针: P1 & P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾;接下来向前移动P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。碰到第一个空格之后,把P1向前移动1格,在P2之前插入字符串"%20",然后把P2向前移动3格;接着向前复制,直到碰到第二个空格,和上次一样;此时若P1和P2指向同一位置,表明所有空格都已经替换完毕。
    /*
    length为字符数组string的总容量
    */
    void ReplaceBlank(char string[], int length){
        if(string==nullptr && length<=0)
            return;
    
        // originalLength 为字符串string的实际长度
        int originalLength = 0;
        int numberOfBlank = 0;
        int i = 0;
        while(string[i] != ''){
            ++originalLength;
            if(string[i] == ' ')
                ++numberOfBlank;
            ++i;
        }
    
        // newLength 为把空格替换成'%20'之后的长度
        int newLength = originalLength + numberOfBlank*2;
        if(newLength > length)
            return;
    
        int indexOfOriginal = originalLength;
        int indexOfNew = newLength;
        while(indexOfOriginal >=0 && indexOfNew > indexOfOriginal){
            if(string[indexOfOriginal] == ' '){
                string[indexOfNew--] = '0';
                string[indexOfNew--] = '2';
                string[indexOfNew--] = '%';
            }else{
                string[indexOfNew--] = string[indexOfOriginal];
            }
            --indexOfOriginal;
        }    
    
    }
    
    
  • 相关阅读:
    深入理解JVM(二)--对象的创建
    深入理解JVM(一) -- 自动内存管理机制
    代理模式(Proxy)
    心知天气数据API 产品的高并发实践
    Jenkins 构建踩坑经历
    log4net SmtpAppender 踩坑总结
    从 ASP.NET Core 2.1 迁移到 2.2 踩坑总结
    在Windows上安装 Consul
    redis-desktop-manager 0.9.3 安装(最后一个免费版本)
    在Windows上安装Redis
  • 原文地址:https://www.cnblogs.com/CodingML-1122/p/9189917.html
Copyright © 2011-2022 走看看