【剑指offer】面试题 5:替换空格

题目描述

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

时间限制:1秒 空间限制:32768K 热度指数:283203
本题知识点: 字符串

思路:第一种,简单粗暴,直接遍历,从前往后替换。遇到空格,就替换,同时将后面的所有字符都往后移;
缺点:每遇到一次空格都要移动后面的所有字符串,很多字符被移动多次,效率低下。
第二种,先遍历,得出字符串的基本信息——长度、空格个数。计算出替换后的字符串的长度,从后往前去替换,
这样就可以避免字符的多次移动。
第三种,用Python语言来实现,利用replace函数来实现,一行代码搞定。

参考代码
1、C++版本
class Solution {
public:
    // length 为字符串组 str 的总长度
    void replaceSpace(char *str,int length) {
        if (str == nullptr || length <= 0) {
            return;
        }
        int originalLength = 0; // 原始字符串的长度
        int numberOfBlank = 0; // 空格的个数
        int i = 0;
        while (str[i] != '\0') {
            ++originalLength;
             
            if (str[i] == ' ') {
                ++numberOfBlank;
            }
            i++;
        }
         
        /* newLength 为把空格替换成 '%20' 之后的长度*/
        int newLength = originalLength + numberOfBlank * 2;
        if (newLength > length) {
            return;
        }
         
        int indexOfOriginal = originalLength; // 因为字符串的结尾是 '\0', 所以字符串的长度除了字符长度还要加上'\0'结尾的字符
        int indexOfNew = newLength;
        while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) {
            if (str[indexOfOriginal] == ' ') {
                str[indexOfNew --] = '0';
                str[indexOfNew --] = '2';
                str[indexOfNew --] = '%';
            }
            else {
                str[indexOfNew --] = str[indexOfOriginal];
            }
             
            -- indexOfOriginal;
        }
    }
};

2、Python版本
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        s = s.replace(' ', '%20')
        return s

总结
1、C++执行效率高,占用内存小;(运行时间:1ms   占用内存:496k)
2、Python实现简单,代码量少;  (运行时间:36ms  占用内存:5760k)
3、Python简直就是流氓,一行代码搞定所有。好想用这个做面试题,怎么办?哈哈














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值