• 一道有意思的面试题


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

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

  • 相关阅读:
    光学
    ZYNQ学习笔记2——实例
    ZYNQ学习笔记
    AD使用技巧
    关于浮点运算的一点见解
    解决ccs不能同时导入两个相同工程名的问题
    multisum14 快捷键
    你的进程为什么被OOM Killer杀死了?
    Linux下哪些进程在消耗我们的cache?
    linux 安装python3.7.5
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15156448.html
Copyright © 2020-2023  润新知