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

来源:互联网 发布:淘宝店铺申请全球购 编辑:程序博客网 时间:2024/06/07 23:34

题目描述

请实现一个函数,将一个字符串中的空格替换成“%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简直就是流氓,一行代码搞定所有。好想用这个做面试题,怎么办?哈哈














原创粉丝点击