替换空格-字符串

替换空格

思路

1、Python思路
新建数组放替换后的字符
时间复杂度O(n)
空间复杂度O(n)
用数组存储替换后的结果,for循环遍历字符串,若元素等于空格,往数组里append(‘%20’);若不等于,往数组里append(元素本身)

class Solution:
    def replaceSpace(self, s: str) -> str:
        res=[]
        for c in s:
            if c == ' ':
                res.append('%20')
            else:
                res.append(c)
        return ''.join(res)

2、双指针+从后往前

  1. 扩充数组到每个空格替换成%20后的大小
  2. 从后向前填充,左指针-起点是源字符串尾巴,右指针-起点是新数组尾巴,都往左移
    循环条件:left>=0
    时间复杂度O(n), 空间复杂度O(n);因为python不支持字符串自扩展,需要另外的列表存储,所以空间复杂度O(n)。
  • 好处:
  1. 从后向前填充,避免了从前先后填充,每次加元素都要将添加元素之后的所有元素向后移动,减少时间复杂度。
class Solution:
    def replaceSpace(self, s: str) -> str:
        #计算空格数量
        n=s.count(' ')
        #字符串转为list
        res = list(s)
        #扩充数组,替换字符串'%20',有3位,还差2*n位
        tmp_list=[' ']*2*n
        res=res+tmp_list
        #左指针-起点是源字符串尾巴,右指针-起点是新数组尾巴
        left=len(s)-1
        right=len(res)-1
        #从后往前填充
        while left >= 0:
            if res[left] != ' ':
                res[right]=res[left]
            else:
                res[right]='0'
                res[right-1]='2'
                res[right-2]='%'
                right-=2
            left-=1
            right-=1
        return ''.join(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值