难度:⭐
题目描述:
请实现一个函数,把字符串 s
中的每个空格替换成”%20”。
示例1:
1 | 输入:s = "We are happy." |
限制:
0 <= s 的长度 <= 10000
解题过程:
思路:
遍历字符串,对每一个空格元素,使用string的成员函数replace进行子串替换。
c++代码:(执行用时0ms,击败100.00%,内存消耗6.6M,击败7.61%)
1 | class Solution { |
官方题解:
方法一:字符数组
由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。
获得 s
的长度 length
创建字符数组 array
,其长度为 length * 3
初始化 size
为 0
,size
表示替换后的字符串的长度
从左到右遍历字符串 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 | class Solution { |
复杂性分析
- 时间复杂度:$O(n)$。遍历字符串
s
一遍。 - 空间复杂度:$O(n)$。额外创建字符数组,长度为
s
的长度的 3 倍。
总结:
官方题解是使用Java实现的(用Java干嘛呀😑),道不同不相为谋,借鉴思想就完事了。