我想用它们的链接来更新单词/短语。
然而,由于短语可能是其他词的子串,我正在寻找一种有效的方法来替换所有的单词/短语而不重复替换。
替换列表
A的一个例子:在“>>”之后,需要用相应的标记链接替换以下单词/短语:
[ABC Apple](http://abc_apple)
[ABC Apples](http://abc_apples)
[Apple](http://apple)
[Apples](http://apples)
[Apple Pie](http://apple_pie)
[Red Apple](http://red_apple)
[Red Apple Pie](http://red_apple_pie)
Idea
当每个单词/短语(子字符串)存储包含它们的单词/短语(字符串)的数据结构(例如list_l)时,我们可以在检查句子是否包含子字符串之前检查句子是否包含list_l中的元素。
例如,现在我们有以下子字符串:{list_l(string)}
但是,计算工作将非常安静,因为list_l中的每个元素仍然需要检查该元素的list_l。
示例
有些句子可以替换为示例(从后面走过去):
计算工作量O(n^3)句子长度x替换列表长度x list_l长度
(原句>>结果句:)
预期结果
"I like ABC Apple!"` >> `"I like [ABC Apple](http://abc_apple)!"
错误结果
"I like ABC Apple!"` >> `"I like ABC [Apple](http://apple)!"
发布于 2019-08-07 13:18:44
存在一个贪婪的朴素O(MN + MlogM)解决方案(字符串的N大小和所有替换的M大小)。
第一段是按长度(O(MlogM))对可能的替换进行排序。
然后在原来的句子中搜索一个替换,如果发现替换,则执行替换(O(N))。每次替换都需要这样做;O(MN)也是如此。
你按顺序搜索应该能解决你的问题(如果我很理解的话)。
为了在开发中保持上面的复杂性,您可能需要一些技巧才能不阅读“已经完成的替换”,但是应该不会太困难。
最后,我认为可以使用一些数据结构来实现时间复杂度较低的解决方案,但更难实现。
https://stackoverflow.com/questions/57393257
复制相似问题