@author=yhr | 思路来源于剑指offer
题目描述
- 官方原题:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
- 个人补充: 把两个有序数组合并到一个数组。(放到最后讲)
思路分析
- 如果要从前往后,遍历整个字符串,然后每次遇到空格就要插入 ”%20“,整个字符串后移,可就太麻烦啦! 就像顺序存储插入字符一样,插入n 个字符的复杂度可达 O(n^2)!
- 官方解法:
-
- 提前知道一共有多少个空格 (遍历一遍字符串 ,O(N)) ,
-
- 然后提前计算出 替换空格以后 的字符串长度呢?
-
- 再 从后往前 来覆盖呢~
注意: python 中不能修改String里面的字符 – 换成 数组 来解决。
解法
class Solution:
def replaceSpace(self, s: str) -> str:
s = list(s) # 将原先字符串转化为数组
originlength = len(s)
# 根据空格数,增加S长度
blankCount = 0
for _ in s:
if _ == " ":
blankCount += 1
s = s + ['-1', '-1'] # 增加长度
afterLength = len(s)
p1 = originlength - 1 # front
p2 = afterLength - 1 # back
while p1 != p2:
if s[p1] == " ":
s[p2] = '0';
p2 -= 1
s[p2] = '2';
p2 -= 1
s[p2] = '%';
p2 -= 1
else:
s[p2] = s[p1]
p2 -= 1
p1 -= 1
return self.list2str(s)
列表转化为字符串
def list2str(self, l):
string = ''
for _ in l:
string +=_
return string
有序数组合并
这个题请移步我另一篇博客~
【菜鸡刷题 - 牛客网NC22】 两数组合并 || 尾开,头结 覆盖法 || python || [类似于剑指offer05] 替换空格