Leetcode原题链接:替换空格
一、自己写的版本
1、思路
- 新申请一个列表,遍历字符串,遇到空格就
append("%20")
,其他情况复制字符串。 - 列表转字符串。
2、代码
class Solution:
def replaceSpace(self, s: str) -> str:
news = []
for i in s:
if i != " ":
news.append(i)
else:
news.append("%20")
return ''.join(news)
二、双指针版
1、思路
- 不申请额外空间,计算空格数量,增加字符串长度,从字符串结尾倒着遍历,填入原字符串。
- 不过 python 中还是需要申请额外空间。
2、代码
class Solution:
def replaceSpace(self, s: str) -> str:
counter = s.count(' ')
res = list(s)
# 每碰到一个空格就多拓展两个格子,1 + 2 = 3个位置存’%20‘
res.extend([' '] * counter * 2)
# 原始字符串的末尾,拓展后的末尾
left, right = len(s) - 1, len(res) - 1
while left >= 0:
if res[left] != ' ':
res[right] = res[left]
right -= 1
else:
# [right - 2, right), 左闭右开
res[right - 2: right + 1] = '%20'
right -= 3
left -= 1
return ''.join(res)
三、新知识
1、count()
函数
统计在字符串/列表/元组中某个字符出现的次数,可以设置起始位置或结束位置。str.count("字符串/列表/元组", start,end)
举例如下:
a = "hello, world"
count = a.count('l', 0, 5)
print(count)
# 2
2、extend()
函数
用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
a = ['a','b']
a.extend('cde')
print(a)
# ['a', 'b', 'c', 'd', 'e']
部分内容参考代码随想录