我是python的新手,这是我的面试问题。如何在不使用替换函数或任何其他内置函数的情况下替换主字符串中的子字符串
示例:appliandaple输出:香蕉和香蕉
我认为,既然这是一个面试问题,你应该在这方面投入更多的精力,而不仅仅是在这里发布问题。但我不是来告诉你如何做好面试准备的。
您可以做的是将字符串视为一个字符数组,并剪切出要替换的键大小的切片。以下解决方案可能不是最快的解决方案,但由于不允许您使用replace()
,因此性能可能不是首要任务。因此,如果不使用任何基于字符串的内置Ins,我的第一个猜测是:
def replace_custom(target: str, to_be_replaced: str, replace_with: str) -> str:
for i in range(len(target)-len(to_be_replaced)+1):
if target[i:len(to_be_replaced) + i] == to_be_replaced:
new_target = '{}{}{}'.format(target[:i], replace_with, target[len(to_be_replaced) + i:])
return replace_custom(new_target, to_be_replaced, replace_with)
return target
并这样称呼它:
a = 'appleandapple'
b = 'apple'
c = 'banana'
print(replace_custom(a, b, c))
Look ma,没有内置,没有方法
In [35]: def sub(s, a, b):
...: def l(s):
...: l=0
...: for _ in s: l+=1
...: return l
...: ls, la = l(s), l(a)
...: i, out = 0, ""
...: while i<ls:
...: if s[i:i+la] == a :
...: out += b
...: i = i+la
...: else:
...: out += s[i]
...: i = i+1
...: return out
...: sub('appleandapple', 'apple', 'banana')
Out[35]: 'bananaandbanana'
如果有人问我这个问题,我会用字符串切片的方式解决它。
我不认为任何面试官会限制使用
len()
和range()
,因为它们在Python中非常琐碎
s = 'appleandapple'
sub_s = 'apple'
rep_s = 'banana'
ans = ''
# Stores the {start_idx: end_idx} of matched substring
indices = {}
for i in range(0, len(s)-len(sub_s)+1):
if s[i:i+len(sub_s)] == sub_s:
indices[i] = i+len(sub_s)-1
i = 0
while i < len(s):
if i in indices:
ans += rep_s
i += indices[i]
else:
ans += s[i]
i += 1
print(ans)
# Output:
bananaandbanana