string - 递归删除字符串中所有出现的子字符串的有效方法是什么?

标签 string algorithm

<分区>

抱歉我的英语不好。

我有这样的问题。给定一个字符串(可能是一个很长的字符串)和一个模式,我怎样才能删除字符串中所有出现的模式?请注意,删除前一个后可能会出现新的事件。例如:

string: deaabcbcef
pattern: abc
result: deef

是否有任何算法或有效的方法来解决它(在几秒钟内)?

P/S:我举了一个简单的例子来说明,但我认为不是这样。字符串长度可达10^6个字符,限时2秒。有什么算法吗?

最佳答案

对于python,我不知道是否有比简单的老式循环更好的方法:

new = old.replace(pattern, '')
while new != old:
    old = new
    new = old.replace(pattern, '')

例子:

>>> old = 'deaabcbcef'
>>> pattern = 'abc'
>>> new = old.replace(pattern, '')
>>> while new != old:
...     old = new
...     new = old.replace(pattern, '')
... 
>>> new
'deef'

关于string - 递归删除字符串中所有出现的子字符串的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666655/

相关文章:

php - 如何从 MySQL 表中的纬度/经度获取最近的地点?

ruby - 获取名字并删除字符串中的其余部分

java - java中的旋转字符串

python - 给定测地线的成对距离矩阵,哪些算法可用于为流形生成欧几里德嵌入?

javascript - 在 Javascript 中将数组分成总和接近相同的 3 部分

python - 有效地计算没有尾随零的阶乘?

c - 为什么我可以使用 CLion 修改字符串文字?

swift - 如何在 iOS Swift 4.2 中获取范围内的子字符串

c - 从函数中替换 char[] 中的字符

java - 如何改进使用 Java 泛型编写的实用算法的设计和可读性?