剑指Offer -- 替换空格(C++)

题目描述

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

通过判断空格的个数来确定转换后的字符串长度后,我们一般会想到由前往后替换空格,但是如此之来,后面的字符需要多次移动,导致效率低下。反过来,如果由后往前进行替换,那么需要改变位置的字符只需要移动一次,时间复杂度为O(n)。

class Solution {
public:
    void replaceSpace(char *str, int length) {
        int blank = 0;
        for (int i = 0; i < length; i++) {
            if (str[i] == ' ') 
                blank++;
        }
        int newLength = length + blank * 2;
        for (int i = length - 1; i >= 0; i--) {
            if (str[i] == ' ') {
                str[--newLength] = '0';
                str[--newLength] = '2';
                str[--newLength] = '%';
            } else {
                str[--newLength] = str[i];
            }
        }
    }
};

附上本地的IDE测试版:

#include <iostream>
using namespace std;
 
class Solution {
public:
    void replaceSpace(char *str, int length) {
        int blank = 0;
        for (int i = 0; i < length; i++) {
            if (str[i] == ' ') 
                blank++;
        }
        int newLength = length + blank * 2;
        for (int i = length - 1; i >= 0; i--) {
            if (str[i] == ' ') {
                str[--newLength] = '0';
                str[--newLength] = '2';
                str[--newLength] = '%';
            } else {
                str[--newLength] = str[i];
            }
        }
    }
};

int main() {
    // 前提是字符串的空间足够大 
    // char str[1024] = "We Are Happy";
    char *str = new char[1024];
    cout << "请输入字符串:" << endl;
    cin.getline(str, 1024);
    int length = 0, i = 0;
    while (str[length] != '\0')
        length++; 
    Solution s;
    s.replaceSpace(str, length);
    cout << "替换空格后的结果:" << endl;;
    while (str[i] != '\0') {
        cout << str[i];
        i++; 
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,438评论 0 5
  • 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替...
    云胡同学阅读 407评论 0 0
  • 字符串 记录《剑指offer》中所有关于字符串的题目,以及LeetCode中的相似题目 相关题目列表 题目 字符串...
    wenmingxing阅读 647评论 0 7
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,168评论 1 1
  • 定义一个类 定义一个类,使用关键字class声明,后面跟类名(不使用new) 定义类的属性 类的属性可以使用var...
    SiberianDante阅读 289评论 0 2