面试题05 替换空格(Python3)(TypeError: str object does not support item assignment 字符串替换)

请实现一个函数,把字符串 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来寻找正确的位置。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R.X. NLOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值