剑指offer笔记-替换空格

面试题5:替换空格

方法:首先遍历字符串,统计空格的个数,然后扩容字符串,使用两个指针,一个指向原字符串末尾,另一个指向扩容后的字符串末尾,依次向前移动指针,遇到字符就将前面指针的字符复制到后面的指针,遇到空格则依次替换为%20,时间复杂度为O(n)。

完整代码:

// 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--;
    }
} 
原文地址:https://www.cnblogs.com/ZhangWj-/p/12953764.html