天天看点

[python]剑指Offer-替换空格

牛客OJ:替换空格

Description:

请实现一个函数,将一个字符串中的每个空格替换成“%20”。

例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路一:

  • 新建字符串,依次遍历输入字符串,若为空格则替换后加入新字符串,若非空格则直接加入。
# -*- coding:utf-8 -*-
# 运行时间:22ms
# 占用内存:5860k
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        l=''
        for i in s:
            if i==' ':
                l+='%20'
            else:
                l+=i
        return l
           

思路二:

  • 用split函数根据空格对字符串进行划分,转为list,再用join函数连接成字符串。
# -*- coding:utf-8 -*-
# 运行时间:20ms
# 占用内存:5728k
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        return '%20'.join(s.split(' '))
           

思路三:

  • 调用python中字符串替换函数(我也不想的_(:з」∠)_)。
# -*- coding:utf-8 -*-
#运行时间:28ms
#占用内存:5752k
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        return s.replace(' ','%20')
           

19.3.14

看了下别人的方法,原来这题用从前到后遍历那么low哈哈哈。下面补一个从后往前遍历的~

思路四:

  • 从前往后遍历字符串,记录空格个数,得到替换后应有的字符串长度;
  • 从后往前遍历替换后字符串长度,若遇空格则通过修改下标依次加入’%’,'2’,‘0’,否则加入原字符串中元素。

注意:由于python中不能直接修改字符串,上述方法需要进行间接修改。

class Solution:
# -*- coding:utf-8 -*-
#运行时间:23ms
#占用内存:5736k
    # s 源字符串
    def replaceSpace(self, s):
        l=len(s)
        blank=0
        for i in range(l):
            if s[i]==' ':
                blank+=1
        res=[0]*(l+2*blank)#借助一个list来修改字符串
        for i in range(l-1,-1,-1):
            if s[i]!=' ':
                res[i+2*blank]=s[i]
            else:
                res[i+2*blank]='0'
                res[i+2*blank-1]='2'
                res[i+2*blank-2]='%'
                blank-=1
        return ''.join(res)
           

附:python修改字符串中元素的方法

继续阅读