一道有意思的面试题

面试官问:
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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

添加关注,让我们一起共同成长!

posted on 2021-08-18 13:56  Wu_Candy  阅读(41)  评论(0编辑  收藏  举报