思路
1、Python思路
新建数组放替换后的字符
时间复杂度O(n)
空间复杂度O(n)
用数组存储替换后的结果,for循环遍历字符串,若元素等于空格,往数组里append(‘%20’);若不等于,往数组里append(元素本身)
class Solution:
def replaceSpace(self, s: str) -> str:
res=[]
for c in s:
if c == ' ':
res.append('%20')
else:
res.append(c)
return ''.join(res)
2、双指针+从后往前
- 扩充数组到每个空格替换成%20后的大小
- 从后向前填充,左指针-起点是源字符串尾巴,右指针-起点是新数组尾巴,都往左移
循环条件:left>=0
时间复杂度O(n), 空间复杂度O(n);因为python不支持字符串自扩展,需要另外的列表存储,所以空间复杂度O(n)。
- 好处:
- 从后向前填充,避免了从前先后填充,每次加元素都要将添加元素之后的所有元素向后移动,减少时间复杂度。
class Solution:
def replaceSpace(self, s: str) -> str:
#计算空格数量
n=s.count(' ')
#字符串转为list
res = list(s)
#扩充数组,替换字符串'%20',有3位,还差2*n位
tmp_list=[' ']*2*n
res=res+tmp_list
#左指针-起点是源字符串尾巴,右指针-起点是新数组尾巴
left=len(s)-1
right=len(res)-1
#从后往前填充
while left >= 0:
if res[left] != ' ':
res[right]=res[left]
else:
res[right]='0'
res[right-1]='2'
res[right-2]='%'
right-=2
left-=1
right-=1
return ''.join(res)