我试图找到str.replace()
内置 python 的时间复杂度,这是我设法收集的数据(这里和其他网站):
我知道replace()
是基于 Boyer–Moore 算法,它需要 O(n*m) 的最坏情况时间来找到一个子字符串,但这是针对单个子字符串吗?
replace()
当它找到第一个子字符串然后再次开始搜索时是否返回“固定”字符串的副本?
当我们多次出现子字符串时,例如以下示例:
old_string = '192.168.1.1'
new_string = old_string.replace('.', '|')
如果它一次只能替换一个子串,那么对于单个子串,我们得到 O(n*m),乘以子串的数量,最大值为 n/m。这是O(n ^ 2)!
假设一个简单的循环需要 O(n),比如:
old_string = '192.168.1.1'
new_string = []
for ch in old_string:
new_string.append('|' if ch == '.' else ch)
那有意义吗?我错过了什么吗?
内置的 replace() 是否会因多次替换而存在缺陷,或者它是否以一种从中断处继续的方式实现?