0%

替换空格

题目地址

难度:

题目描述:

请实现一个函数,把字符串 s 中的每个空格替换成”%20”。

示例1:

1
2
输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

0 <= s 的长度 <= 10000

🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️解题过程🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️🙋‍♂️
解题过程:

思路:

遍历字符串,对每一个空格元素,使用string的成员函数replace进行子串替换。

c++代码:(执行用时0ms,击败100.00%,内存消耗6.6M,击败7.61%)

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
string replaceSpace(string s) {
for(int i=0;i<s.length();++i){
//遍历字符串
if(s[i]==' '){
//替换字符
s.replace(i,1,"%20");
}
}
return s;
}
};
💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎官 方 题 解💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎
官方题解:

方法一:字符数组

由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。

获得 s 的长度 length
创建字符数组 array,其长度为 length * 3
初始化 size0size 表示替换后的字符串的长度
从左到右遍历字符串 s
获得 s 的当前字符 c
如果字符 c 是空格,则令 array[size] = '%'array[size + 1] = '2'array[size + 2] = '0',并将 size 的值加 3
如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1
遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串

Java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public String replaceSpace(String s) {
int length = s.length();
char[] array = new char[length * 3];
int size = 0;
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
if (c == ' ') {
array[size++] = '%';
array[size++] = '2';
array[size++] = '0';
} else {
array[size++] = c;
}
}
String newStr = new String(array, 0, size);
return newStr;
}
}

复杂性分析

  • 时间复杂度:$O(n)$。遍历字符串 s 一遍。
  • 空间复杂度:$O(n)$。额外创建字符数组,长度为 s 的长度的 3 倍。
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:

官方题解是使用Java实现的(用Java干嘛呀😑),道不同不相为谋,借鉴思想就完事了。

------------- THE END! THANKS! -------------