mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 11:34:46 +08:00
简化 剑指Offer05.替换空格.md python代码
减少不必要的变量使用,优化空间复杂度,使用切片替换而不是单个替换
This commit is contained in:
@ -202,45 +202,27 @@ func replaceSpace(s string) string {
|
|||||||
|
|
||||||
python:
|
python:
|
||||||
```python
|
```python
|
||||||
class Solution(object):
|
class Solution:
|
||||||
def replaceSpace(self, s):
|
def replaceSpace(self, s: str) -> str:
|
||||||
"""
|
counter = s.count(' ')
|
||||||
:type s: str
|
|
||||||
:rtype: str
|
|
||||||
"""
|
|
||||||
list_s = list(s)
|
|
||||||
|
|
||||||
# 记录原本字符串的长度
|
res = list(s)
|
||||||
original_end = len(s)
|
# 每碰到一个空格就多拓展两个格子,1 + 2 = 3个位置存’%20‘
|
||||||
|
res.extend([' '] * counter * 2)
|
||||||
|
|
||||||
# 将空格改成%20 使得字符串总长增长 2n,n为原本空格数量。
|
# 原始字符串的末尾,拓展后的末尾
|
||||||
# 所以记录空格数量就可以得到目标字符串的长度
|
left, right = len(s) - 1, len(res) - 1
|
||||||
n_space = 0
|
|
||||||
for ss in s:
|
|
||||||
if ss == ' ':
|
|
||||||
n_space += 1
|
|
||||||
|
|
||||||
list_s += ['0'] * 2 * n_space
|
|
||||||
|
|
||||||
# 设置左右指针位置
|
|
||||||
left, right = original_end - 1, len(list_s) - 1
|
|
||||||
|
|
||||||
# 循环直至左指针越界
|
|
||||||
while left >= 0:
|
while left >= 0:
|
||||||
if list_s[left] == ' ':
|
if res[left] != ' ':
|
||||||
list_s[right] = '0'
|
res[right] = res[left]
|
||||||
list_s[right - 1] = '2'
|
|
||||||
list_s[right - 2] = '%'
|
|
||||||
right -= 3
|
|
||||||
else:
|
|
||||||
list_s[right] = list_s[left]
|
|
||||||
right -= 1
|
right -= 1
|
||||||
|
else:
|
||||||
|
# [right - 2, right), 左闭右开
|
||||||
|
res[right - 2: right + 1] = '%20'
|
||||||
|
right -= 3
|
||||||
left -= 1
|
left -= 1
|
||||||
|
return ''.join(res)
|
||||||
# 将list变回str,输出
|
|
||||||
s = ''.join(list_s)
|
|
||||||
return s
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user