请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
if s == None:
return None
l1 = len(s) # 原字符串的长度
spaceNumber = 0 # 用来记录空格的数目
for i in range(len(s)):
if s[i] == " ":
spaceNumber += 1
l2 = l1 + 2*spaceNumber # 因为一个空格要用% 2 0三个字符来替换,因此也就是原字符串有一个空格,新字符串的长度就要加2
str = [1] * l2 # 生成一个长度为l2的列表,用来填充
# 设置两个指针,分别指向s和str的尾部
p1 = l1 - 1
p2 = l2 - 1
while p1 >= 0:# 设置循环终止条件
if s[p1] != " ": # 如果s当前的空格不为空,直接落下即可。
str[p2] = s[p1]
p1 -= 1 # 更新p1和p2
p2 -= 1
else: # 如果为空,那么就要用%20来替换了
str[p2] = "0"
str[p2-1] = "2"
str[p2-2] = "%"
p1 -= 1
p2 -= 3
return "".join(str) # 连接str列表,生成字符串
思想:
- 考虑空字符串,返回空。
- 不空的字符串,用一个列表记录替换后每个字符。
- 先通过遍历字符,确定替换后的字符长度,形成一个占位列表。
- 字符不为空,直接加入列表相应位置,空则根据要求替换。
可以从前往后遍历字符串, 并判断当前字符是不是空格,如果是空格的话,就将空格用20%代替。但是这种方法,效率较低,因为每替换一次空格,都要将原字符串中当前被替换空格之后的字符往后移动两个位置。因此从后向前遍历。