05. 替换空格
来源:力扣(LeetCode)
链接: https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
解题思路:
- 遍历并替换空格,在python中,str类型是不可以被更改的,只能新建一个str,并将遍历结果保持到新的str中;在cpp中,string类型是可以被更改的,直接原地进行更改就行,但是要考虑容器的大小要变大,要修复容器的大小,遍历的时候要从后往前遍历,双指针方式进行替换,
i
指向原字符串尾部元素,j
指向新字符串尾部元素;当i = j
时跳出(代表左方已没有空格,无需继续遍历);
代码实现
- python实现
class Solution:
def replaceSpace(self, s: str) -> str:
new_s = ''
for ss in s:
if ss == ' ':
new_s += '%20'
else:
new_s += ss
return new_s
- c++实现
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
int len = s.size();
// 统计空格个数
for(auto ch: s)
{
if(ch==' ')
{
count++;
}
}
// 修改容器大小
s.resize(len+count*2);
// 倒序遍历修改
for(int i=len-1, j = s.size() - 1; i<j; i--, j--)
{
if(s[i] != ' ')
{
s[j] = s[i];
}
else
{
s[j] = '0';
s[j-1] = '2';
s[j-2] = '%';
j -= 2;
}
}
return s;
}
};
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n), O ( 1 ) O(1) O(1)