20180325剑指offer题4——空格替换

一、要求

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

二、思路及代码

    此题有多种解法,需要和面试官沟通好,是否接受直接调用replace函数的做法,是否认可正则化的做法,是否可以另外新建字符串做,是否必须在原存储空间实现。以此分为多种解法:

方法一:调用replace函数

A='We are happy.'.replace(' ','20%')
print(A)

方法二:正则化调用re模块方式

import re#re模块提供对正则表达式的支持
pattern=re.compile(' ')#将正则表达式的字符串形式编译为模式实例
print(pattern.sub('20%','We are happy.'))

方法三:创建新的字符串

可以通过list的append方法,string的字符串相加方法,可以把上面的两个方法写成函数形式(如果考官要求的话)

#通过list生成新的字符串
#list的添加使用append
def solution1(s):
    stringold=list(s)
    stringnew=[]
    for item in stringold:
        if item ==' ':stringnew.append('%20')
        else:stringnew.append(item)
    return (''.join(stringnew))#join函数使list中的元素以指定字符连接

#通过‘’生成新的字符串
#string的添加使用+实现字符串的组合
def solution2(s):
    if type(s)!= str:
        return #非法输入限制
    stringnew=''
    for item in s:
        if item ==' ':stringnew+='%20'
        else:stringnew+=item
    return stringnew

#将4.1的replace方法写成函数形式
def solution3(s):
    if type(s)!=str:return
    return s.replace(' ','%20')

def main():
    s='We are happy'
    print(solution1(s))
    print(solution2(s))
    print(solution3(s))

if __name__=='__main__':
    main()

方法四:计算替换后的长度,从后向前填入   

    按照书上复杂度为O(n)的做法,先扫描一遍,求出最终长度,再从后向前扫描。书上的意思是在原字符串上替换,示例程序似乎还是新建了一个空间,此处有点疑惑,难道改成来个s+=‘ ’*num的操作?暂不编程。参考程序在下面网址的replaceSpace3

https://github.com/Jack-Lee-Hiter/AlgorithmsByPython/blob/master/Target%20Offer/%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.py

三、思考与总结

1.到目前为止接触到的非法输入判断方式:

if not X

if X==None

if len(X)<=0#不知道为什么要判断是否小于0,还有这种操作?

if type(X)!=str#这个是判断s是否是字符串

if not isinstance(s,str)

#有时需要并列判断,并列判断注意先后顺序

2.两种后续添加

list使用append(),字符串使用+=

猜你喜欢

转载自blog.csdn.net/weixin_41819299/article/details/79691234
今日推荐