一、要求
实现一个函数,将一个字符串中的空格替换成“%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(),字符串使用+=