1、题目描述:
2、方法一:使用额外空间
思路:
代码:
class Solution:
def replaceSpace(self, s: str) -> str:
ans = ""
for each in s:
if each == " ":
ans += "%20"
continue
ans += each
return ans
3、方法二:暴力法
思路:
代码:
class Solution:
def replaceSpace(self, s: str) -> str:
s = [ss for ss in s] # 转换为list
length = len(s)
i = 0
while i < len(s):
if s[i] == ' ': # 向后移两位
end1, end2 = s[-1], s[-2] # 由于Python没有预先开辟空间的说法,这里只能保存最后两个
s.append(end2)
s.append(end1)
for j in range(len(s)-5, i, -1):
s[j+2] = s[j]
s[i], s[i+1], s[i+2] = '%', '2', '0'
i += 2
i += 1
return ''.join(s)
4、方法三:双指针
思路:
这么做有两个好处:
代码:
class Solution:
def replaceSpace(self, s: str) -> str:
s_list = [ss for ss in s] # 转换为list,分析的时候不计入空间复杂度
# 1.统计s_list中空格的个数
nums = 0
for i in range(len(s_list)):
if s_list[i] == ' ': nums += 1
# 2.扩充s_list为nums的2倍,这里用空格填充
for _ in range(2*nums):
s_list.append(' ')
# 3.使用两个指针替换空格
i, j = len(s_list)-1, len(s)-1 # 分别指向新旧数组的末尾
while j >= 0:
if s_list[j] == ' ': # 为空格,则把i向前移动三位,并把这三位赋值为'%', '2', '0'
s_list[i-2], s_list[i-1], s_list[i] = '%', '2', '0'
i -= 3
else: # 不为空格,把j位置的字符赋值给i位置,并把i向前移动一位
s_list[i] = s_list[j]
i -= 1
j -= 1
return ''.join(s_list)