一道有意思的面试题
面试官问: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 方法(函数),每一行都有相应的注释,请耐心看完。 1def myReplace(str1, sub, dest, times =None): 2 #如果sub 和 dest的长度任何一个为0,直接返回原字符 3 if(len(sub)==0 or len(dest)==0): 4 return str1 5 #如果times是None,替换的次数是s.count(sub) 6 if times == None: 7 times = str1.count(sub) 8 sub_index = [] 9 #被替换字符长度 10 sub_length = len(sub) 11 #要替换字符长度 12 dest_length = len(dest) 13 #将原字符串转成列表 14 str1 = list(str1) 15 #遍历上面转化后的字符串列表 16 for i in range(len(str1)): 17 #循环遍历到补充替换字符的索引下标值 18 if str1[i:i+sub_length] == list(sub): 19 #追加到sub_index的空列表中 20 sub_index.append(i) 21 22 #定义一个计数器n 23 n = 0 24 #遍历sub_index列表 25 for index in sub_index: 26 #判断替换次数 27 if times > 0: 28 #计算偏移量,因为每一次替换后原str的长度是在变化的 29 offset = n * (dest_length - sub_length) 30 #重新计算index索引下标,需要加上offset偏移量 31 index = index + offset 32 #将原字符串列表中的原字符替换为dest目标字符 33 str1[index:index+sub_length] = list(dest) 34 #计数器加1 35 n += 1 36 #替换次数减1 37 times -= 1 38 #将列表里面的内容进行拼接成字符串 39 return "".join(str1) 40 41str1="abcaababcbccabc" 42print(myReplace(str1,"abc","123"))
面试官反馈:
思路比较清晰,用 Python 实现的代码简洁而清晰,算不错的一个回答。继续吧,下一题…