美文网首页
替换空格

替换空格

作者: DDB_CS | 来源:发表于2017-11-30 21:42 被阅读23次

题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。

样例输入:"We are happy."
样例输出:"We%20are%20happy."
说明:假设输入的字符串有足够的内存空间,可以装下替换后的新字符串,请在原串的基础上进行替换。

解题思路:

这一题很容易想到从头到尾遍历,然后替换空格。但由于一个空格替换成三个字符,我们必须把空格之后的字符向后移动两位。这样一来时间复杂度即为O(n^2).不是很好的解法。合理的做法是,先遍历一遍字符串,统计出空格的数量,然后算出把空格替换成‘%20’之后的新的字符串的长度。使用两个指针,一个指向原来字符串的末尾,另一个指向替换之后的字符串的末尾。遇到普通字符就把字符放到新的串上,两个指针分别向前走一步,遇到空格原字符串的指针向前走一步新的向前走三步,并替换成'%20'.如此一来便可在O(n)的时间复杂度之内完成。

话不多说,代码如下(C++):

//
//  main.cpp
//  replaceBlankSpace
//
//  Created by 孙艳东 on 2017/11/30.
//  Copyright © 2017年 孙艳东. All rights reserved.
//

/*
 *题目描述:请实现一个函数,把字符串中的每个空格替换成‘%20’。例如输入'We are happy.'
 *则输出'We%20are%20happy.',假设原来输入字符串之后有足够多的内存。在原来的字符串上进行替换
 *
 *解题思路:先统计出有多少个空格,计算出替换后的长度,然后创建一个新的数组,用两个指针从后往前插入。
 *时间复杂度为O(n)
 */

#include <iostream>
using namespace std;

void replaceBank(char str[],int length) {
    if (str == NULL || length < 0) {
        return;
    }
    int originStrLength = 0;
    int newStrLength = 0;
    // 计算替换后的长度
    int i = 0;
    while (str[i] != '\0') { // 不是输入结束
        originStrLength ++;
        if (str[i] == ' ') {
            newStrLength ++;
        }
        i ++;
    }
    newStrLength = originStrLength + newStrLength * 2; // 替换后的实际长度
    
    int indexOfOrigin = originStrLength;
    int indexOfNew = newStrLength;
    while (indexOfOrigin >= 0 && indexOfNew > indexOfOrigin) {
        if (str[indexOfOrigin] == ' ') {
            str[indexOfNew --] = '0';
            str[indexOfNew --] = '2';
            str[indexOfNew --] = '%';
        }else {
            str[indexOfNew --] = str[indexOfOrigin];
        }
        indexOfOrigin --;
    }
}


int main(int argc, const char * argv[]) {
    char str[1024];
    cin.get(str, 1024);
    replaceBank(str, 1024);
    std::cout << str;
    return 0;
}

相关文章

  • 替换空格

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

  • 空格替换

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

  • 替换空格

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

  • 空格替换

    空格替换设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你...

  • 替换空格

    《剑指offer》面试题5:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we...

  • 替换空格

    ?环境:牛客的编译环境?语言:JavaScript☕️难点:string的replace方法在不使用正则匹配的情况...

  • 替换空格

    https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3...

  • 替换空格

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

  • 空格替换

    一、题目 请编写一个方法,输入一个字符串,经过一定的处理将字符串中的“空格”替换为“%20”并返回; 二、示例 输...

  • 替换空格

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

网友评论

      本文标题:替换空格

      本文链接:https://www.haomeiwen.com/subject/kopbbxtx.html