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