例题
力扣题目链接
https://leetcode.cn/problems/ti-huan-kong-ge-lcof/
题目说明
请实现一个函数,把字符串 s
中的每个空格替换成
%
20
\%20
%20。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
- 0 ≤ s 的长度 ≤ 10000 0 \leq s 的长度 \leq 10000 0≤s的长度≤10000
解题
方法一:字符数组
由于每次替换从 1
个字符变成 3
个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s
的长度的 3
倍,这样可保证字符数组可以容纳所有替换后的字符。
- 获得
s
的长度length
- 创建字符数组
array
,其长度为 l e n g t h ∗ 3 length * 3 length∗3 - 初始化
size
为 0 0 0,size
表示替换后的字符串的长度 - 从左到右遍历字符串 s
- 获得
s
的当前字符c
- 如果字符
c
是空格,则令 a r r a y [ s i z e ] = % array[size] = \% array[size]=%, a r r a y [ s i z e + 1 ] = 2 array[size + 1] = 2 array[size+1]=2, a r r a y [ s i z e + 2 ] = 0 array[size + 2] = 0 array[size+2]=0,并将size
的值加3
- 如果字符
c
不是空格,则令 a r r a y [ s i z e ] = c array[size] = c array[size]=c,并将size
的值加 1 1 1
- 获得
- 遍历结束之后,
size
的值等于替换后的字符串的长度,从array
的前size
个字符创建新字符串,并返回新字符串
代码
Python3
class Solution:
def replaceSpace(self, s: str) -> str:
s = s.split(' ')
return '%20'.join(s)
C++
class Solution {
public:
string replaceSpace(string s) {
int count = 0, len = s.size();
// 统计空格数量
for (char c : s) {
if (c == ' ') count++;
}
// 修改 s 长度
s.resize(len + 2 * count);
// 倒序遍历修改
for(int i = len - 1, j = s.size() - 1; i < j; i--, j--) {
if (s[i] != ' ')
s[j] = s[i];
else {
s[j - 2] = '%';
s[j - 1] = '2';
s[j] = '0';
j -= 2;
}
}
return s;
}
};
复杂性分析
- 时间复杂度:
O
(
n
)
O(n)
O(n)。遍历字符串
s
一遍。 - 空间复杂度:
O
(
n
)
O(n)
O(n)。额外创建字符数组,长度为
s
的长度的3
倍。