• 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;
        }    
    
    }
    
    
  • 相关阅读:
    c++基础_矩阵乘法
    c++基础_字符串对比
    c++基础_时间转换
    c++基础_特殊回文数
    c++基础_回文数
    c++基础_特殊的数字
    c++基础_杨辉三角形
    c++基础_字母图形
    c++基础_01字串
    java 常用集合类型--以及其特性
  • 原文地址:https://www.cnblogs.com/CodingML-1122/p/9189917.html
Copyright © 2020-2023  润新知