栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

剑指offer 面试题4 替换空格(python代码)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer 面试题4 替换空格(python代码)

目录
    • 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"We are happy.",则输出"We%20are%20happy."。
    • 思路:从字符串后面移动和替换
      • Code
    • 其他方法
      • python内置函数
      • 正则表达式
    • 总结

题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"We are happy.",则输出"We%20are%20happy."。 思路:从字符串后面移动和替换

首先遍历一次字符串统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。以字符串"We are happy."为例,"We are happy."这个字符串的长度是14(包括结尾符号’’),里面有两个空格,因此替换之后字符串的长度是18。

我们从字符串的后面开始复制和替换。首先准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾(如图(a)所示)。接下来我们向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。此时字符串包含如图(b)所示,灰色背景的区域是做了字符拷贝(移动)的区域。碰到第一个空格之后,把P1向前移动1格,在P2之前插入字符串"%20"。由于"%20"的长度为3,同时也要把P2向前移动3格如图©所示。

我们接着向前复制,直到碰到第二个空格(如图(d)所示)。和上一次一样,我们再把P1向前移动1格,并把P2向前移动3格插入"%20" (如图(e)所示)。此时P1和P2指向同一位置,表明所有空格都已经替换完毕。

从上面的分析我们可以看出,所有的字符都只复制(移动)一次,因此这个算法的时间复杂度是O(n)。

Code

实现代码如下:

def replace(s):
    blank_num = s.count(' ') #用python内置函数统计空格个数
    #blank_num = len([i for i in list(s) if i == ' '])#循环遍历每个字符求空格个数

    old_str = list(s)
    new_len = len(s) + 2 * blank_num
    new_str = new_len * [None]
    p1,p2 = len(s)-1,new_len-1
    while p1 <= p2 and p2 >= 0:
        if old_str[p1] == ' ':
            new_str[p2 - 2:p2 + 1] = list("%20")
            p1 -= 1
            p2 -= 3
        else:
            new_str[p2] = old_str[p1]
            p1 -= 1
            p2 -= 1
    return ''.join(new_str)
s = 'We are happy.'
print(replace(s))
其他方法 python内置函数
# 在Python中str类型是不可变的类型, 使用replace语句会生成一个新的str, 原始的s还是带空格的str变量
print('We are happy.'.replace(' ', '20%'))
正则表达式
import re
ret = re.compile(' ')
print(ret.sub('20%', 'We are happy.'))
总结

如果是从头到尾遍历字符串,每碰到一个空格字符的时候移动后面的字符,此时的时间复杂度是O(n^2)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号