剑指offer——面试题python——空格替换

 面试题2:空格替换

def replaceSpace(s):
    # write code here
    if s == None:
        return None
    n = 0
    for i in range(len(s)): #首先计算字符串s的空格数
        if s[i] == ' ':
            n = n + 1
    l1 = len(s)
    l2 = l1 + n * 2 #得到新字符串str的长度
    str = [1] * l2 #生成空str列表

    p1 = l1 - 1 #针对两个字符串设置两个指针
    p2 = l2 - 1
    while (p1 >= 0): #while循环的条件是指针指向0索引 结束
        if s[p1] != ' ': #当p1所指的位置不是空格,就直接将s的值赋给str
            str[p2] = s[p1]
            p1 = p1 - 1
            p2 = p2 - 1
        else:           #当p1指向空格,那么在p2中加入%20
            str[p2] = '0'
            str[p2-1] = '2'
            str[p2-2] = '%'
            p1 = p1 - 1
            p2 = p2 - 3
    return ''.join(str) #将字符串连接起来

s = ' '
print(replaceSpace(s))

#思路:采用从后向前的方法,首先计算s的空格数,然后得到新字符串str的个数,接下来设置两个指针p1,p2,将两个字符串列表对应
#1.将字符串看成列表,可以用切片来取出具体的字符值
#2.注意while循环的条件和指针的使用方法

总结:遇到这个题有两个思路:思路1是从前往后移,思路2是从后往前移。但是从前往后移复杂度为O(n^2),而从后往前移算法复杂度为O(n)。

参考博客(方法和总结都非常好):https://blog.csdn.net/ggdhs/article/details/89814919

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值