请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
方法1:Python内置字符串替换函数replace:
class Solution:
def replaceSpace(self, s: str) -> str:
s = s.replace(' ','%20')
return s
结果很好:
看来python的内置函数还是很高效的O(∩_∩)O
方法2:
逐个遍历字符串中的字符,发现空格则替换为'%20',代码如下:
class Solution:
def replaceSpace(self, s: str) -> str:
index_flag = 0
s1 = s
for index,value in enumerate(s):
if value == ' ':
index = index + index_flag
s1 = s1[:index] + '%20' + s1[index+1:] # 要保证s不会变
index_flag = index_flag + 2 # 每替换一次都index都要加2
return s1
时间复杂度O(N),空间复杂度O(N).
但在实现该方法的过程中遇到了几个问题:
Error1:执行报错TypeError: 'str' object does not support item assignment
>>> a[1]='%20'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
这个错误的原因是
在python中,字符串是不可变对象,不能通过下标的方式直接赋值修改。同样的不可变对象还有:数字、字符串和元组。
为此才有了上述代码中的倒数第三行:
s1 = s1[:index] + '%20' + s1[index+1:]
Error2: 替换位置出错,总是在不该替换的地方替换。
错误代码和结果如下:
# 错误示范!
class Solution:
def replaceSpace(self, s: str) -> str:
for index,value in enumerate(s):
if value == ' ':
s = s[:index] + '%20' + s[index+1:]
return s
错误原因:
每次对s进行替换后s就已经变了,继续用enumerate进行操作index就会错位,从而导致错误。因此需要使用s1作为辅助变量,使s与替换无关。同时用index+2来寻找正确的位置。