0%

代码随想录第二十三天

字符串-替换空格

题目链接

​ 这道题需要注意的就是替换的字符长度是3,对于数组我们需要先扩充大小,然后再一一替换,利用双指针会方便很多。

  1. 不用申请新数组。(看到网上有人申请新数组,然后push_back)
  2. 从后向前填充元素,避免了从前先后填充元素要来的 每次添加元素都要将添加元素之后的所有元素向后移动。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
string replaceSpace(string s) {
int num = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] == ' ') num++;
}
int left = s.size() - 1;
s.resize(s.size() + num*2);
int newSize = s.size();
int right = newSize - 1;
for(; left < right; left--, right--){
if(s[left] != ' ')s[right] = s[left];
else{
s[right] = '0';
s[right-1] = '2';
s[right-2] = '%';
right -= 2;
}

}
return s;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution:
def replaceSpace(self, s: str) -> str:
num = s.count(' ')
res = list(s)
res.extend([' '] * num * 2)

left, right = len(s) - 1, len(res) - 1

while left >= 0:
if res[left] != ' ':
res[right] = res[left]
right -= 1
else:
res[right - 2 : right + 1] = '%20'
right -= 3
left -= 1
return ''.join(res)