string - 用后缀树查找两个单词中最长的子串
问题描述
我需要解决问题 - 用后缀树在两个单词中找到最长的子字符串。我为第一个和第二个单词建立了后缀,但是如何在两个单词中找到最长的子字符串?你能建议一个可能的算法来解决这个问题吗?
解决方案
诀窍是对两个单词使用单个后缀树:
首先使用一些非字符串字符,如
$
or#
或某些东西(不能是任何字符串的一部分)来连接字符串即字符串
abra
并abracadabra
加入abra$abracadabra#
然后从中构建后缀树。
$
现在从以爬上结尾的叶子开始,并将节点标记为 word1 的一部分对以 结尾的叶子执行相同的
#
操作,将它们标记为 word2 的一部分现在我们可以
DFS
从根进行简单的遍历,因为最长的子字符串将是根的一些路径(仅检查同时属于两个单词的节点)
复杂性- O(a+b)
(后缀树构建(如果构建快速方式)+ O(a+b)
(dfs)=O(a+b)
推荐阅读
- php - PHP - CI 3 - 表单 - 设置大量回调验证
- pandas - 改变数据框的结构
- mysql - 如何在nodeJS中使用Sequelize从mysql表中获取序列号?
- elasticsearch - 从 Elasticsearch 数据源获取 Grafana 中的最新元素
- windows - 有没有办法将数据库表与 Azure DevOps Server 的工作项中的下拉列表连接起来
- angular - Angular 10:在视图上显示用户信息
- linux - Linux:检测对进程内存区域的所有写入
- python - Plotly:如何将交互式绘图保存为 pdf 文件?
- android - Android:屏幕截图为 org.webrtc.SurfaceViewRenderer 获取黑色图像
- sorting - Elastic Search 中的聚合和排序