请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 :
输入:s = “We are happy.” 输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
from ast import literal_eval from collections import deque class Solution: def replaceSpace(self, s: str) -> str: """ 算法思想: (1) 开辟一个新字符数组new_s,size为旧字符串长度+空格数的2倍 (2) 设置两个下标指针q_old和p_new,起始q_old指向旧字符串最后与p_new指向新字符数组最后 (3) 判断q_old所指位置元素是否是空格。若是则在新字符数组中使用p_new依次加入0、2、%;否则将s[q_old] 赋值给new_s[p_new],更新p_new。随后更新q_old。 (4) 继续(3),直到不符合循环条件退出循环。当q_old = p_new 时,旧字符串前部剩余部分已无空格 (5) 将旧字符串中前部剩余无空格的字符串依次赋值给新字符数组。 算法时间复杂度: O(len(s)) 空间复杂度: O(len(s)) :param s: :return: """ space_num = 0 # 字符串空格数 for i in s: if i == ' ': space_num += 1 # 字符串中空格数+1 old_len = len(s) # 旧字符串长度 new_len = (space_num << 1) + old_len # 新字符串长度 new_s = deque([' ']*new_len) # 新字符数组 q_old = old_len - 1 # 旧字符串最后一个位置 p_new = new_len - 1 # 新字符串数组最后一个位置 while q_old != p_new: # 构建新字符串数组 if s[q_old] == ' ': # 旧字符串中当前位置为空格时,为新字符数组相应位置存入"%20" new_s[p_new] = '0' p_new -= 1 new_s[p_new] = '2' p_new -= 1 new_s[p_new] = '%' p_new -= 1 else: # 旧字符串中当前位置不为空格时,将旧字符串当前位置的字符赋值到新字符数组相应位置 new_s[p_new] = s[q_old] p_new -= 1 q_old -= 1 # 旧字串下标-1 while q_old >= 0: # 将旧字符串中前部剩余无空格的字符串依次赋值给新字符数组 new_s[q_old] = s[q_old] q_old -= 1 new_s = ''.join(new_s) # 将字符数组拼接成字符串 return new_s # 返回新字符串 def replaceSpace_(self, s: str) -> str: """ 算法思想: 使用re模块 :param s: :return: """ import re s = re.sub(' ', '%20', s) return s if __name__ == '__main__': solution = Solution() # s = literal_eval(input('s: ').strip()) s = "We are happy." result = solution.replaceSpace(s) print(result) result = solution.replaceSpace_(s) print(result) """ 运行结果: We%20are%20happy. We%20are%20happy. Process finished with exit code 0 """[题目来源于Leetcode剑指offer]
