剑指offer JZ02 替换空格 Python 解

一.题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

二.解题思路

这道题其实主要是考察inplace的修改,即在原变量上,不申请新的对象,进行修改。

C/C++,Java传的参数都是可变长的字符串变量。比如char指针和StringBuffer.

但是对于python来说就没有,不过按照思路来说还是讲一讲。

1.新开一个空字符串rst,一次遍历原字符串,如果不是空格,则将原字符与rst相加形成新的字符串,如果是空格则将rst与%20相加形成新的字符串。

2.inplace修改:假设我们接收的参数有字符串(前面是有效字符,后面接上足够多的空字符生成新字符串),和length(表示有效字符的个数)。首先从前往后遍历修改肯定不行,这样的话遇到一个空格,我们添加%20需要把后面所有的字符都往后移动一格,时间复杂度O(N*N).

换个思路:我们首先需要从前往后遍历,数总共有多少个空格,这样我们知道了到形成新字符串需要多少length,然后我们再从后往前修改字符串,从后往前遍历字符串,然后用一个指针记录当前字符应该移动的位置,假设总共有count个字符,当前遍历到的字符在原字符串中的索引为i,那么对与任意字符其新字符串中的位置应该是i+2*count. 遇到空格,count需要-1,然后替换字符。count的更新顺序没啥影响。

三.源码

class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        rst=''
        for ch in s:
            rst+=ch if ch !=' ' else '%20'
        return rst
        
        # 假设我们传进来的也是一个指针和长度length,类似C++
        # 从左至右扫描,从右至左移位处理
        count=0
        for i in range(length):
            count+=1 if ch==' ' else pass
        i=length
        while i>=0:
            if s[i]==' ':
                count-=1
                s[i+2*count]='%'
                s[i+2*count+1]='2'
                s[i+2*count+2]='0'
            else:s[i+2*count]=s[i]
        return s

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值