一道有意思的面试题
面试官问:
1、面试题目:如何重写 Python 的 replace 方法(函数)
2、最终实现的效果如下例子所示
例如:现有3个字符串,分别为
a=“abcaababcbccabc”
b=“abc”
c=“123”
3、如何通过调用重写的 replace 方法:replace(a,b,c)来实现以下输出结果:
输出结果=“123aab123bcc123”
我答:
1、重写 replace 方法的核心思想
(1)、先找到 a 中替换 b 的下标,存到数组里
(2)、然后遍历下标数组即根据下标将 c 替换进去
2、Python 代码重新实现
以下为我使用 Python 语言重新实现的 replace 方法(函数),每一行都有相应的注释,请耐心看完。
def myReplace(str1, sub, dest, times =None): #如果sub 和 dest的长度任何一个为0,直接返回原字符 if(len(sub)==0 or len(dest)==0): return str1 #如果times是None,替换的次数是s.count(sub) if times == None: times = str1.count(sub) sub_index = [] #被替换字符长度 sub_length = len(sub) #要替换字符长度 dest_length = len(dest) #将原字符串转成列表 str1 = list(str1) #遍历上面转化后的字符串列表 for i in range(len(str1)): #循环遍历到补充替换字符的索引下标值 if str1[i:i+sub_length] == list(sub): #追加到sub_index的空列表中 sub_index.append(i) #定义一个计数器n n = 0 #遍历sub_index列表 for index in sub_index: #判断替换次数 if times > 0: #计算偏移量,因为每一次替换后原str的长度是在变化的 offset = n * (dest_length - sub_length) #重新计算index索引下标,需要加上offset偏移量 index = index + offset #将原字符串列表中的原字符替换为dest目标字符 str1[index:index+sub_length] = list(dest) #计数器加1 n += 1 #替换次数减1 times -= 1 #将列表里面的内容进行拼接成字符串 return "".join(str1) str1="abcaababcbccabc" print(myReplace(str1,'abc','123'))
面试官反馈:
思路比较清晰,用 Python 实现的代码简洁而清晰,算不错的一个回答。继续吧,下一题。。。
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!