algorithm - 如何检测文本替换是否导致无限循环?
问题描述
我开发了一个从其他程序中提取文本的程序。其中一项功能是用户可以指定“替换脚本”来处理文本。替换脚本示例:
|ORIG|a|BECOMES|bb|END|
|ORIG|b|BECOMES|cc|END|
替换过程搜索任何ORIG
文本并将其替换为相应的BECOMES
文本。因此,如果文本aaaa
被提取,它会先被替换为bbbbbbbb
,然后是cccccccccccccccc
。
当有这样的替换脚本时会出现问题:
|ORIG|a|BECOMES|bb|END|
|ORIG|b|BECOMES|aa|END|
并且a
在提取的文本中有一个。那个a
变成那个bb
变成那个aaaa
变成那个bbbbbbbb
等等,直到无穷无尽。
因此我需要两种算法: 1. 读取一个替换脚本并检测它是否可能创建一个无限循环(这样我可以警告用户)。2. 执行替换脚本时检测到无限循环(这样我可以中止操作并通知用户)。
我不知道从哪里开始。我已经考虑了两个多星期,但一无所获。
解决方案
如果第一个脚本的 ORIG 是第二个脚本的 BECOMES 的一部分,您可以尝试使用代表替换脚本的节点和连接一个脚本与另一个脚本的边构建一个图。
然后你可以在这个图中搜索循环,告诉你你可以无限期地应用这个循环中的规则。
推荐阅读
- elasticsearch - Elastic5.4:如何跟踪删除索引的完成?
- javascript - 如何在滚动时垂直移动元素,但仅在相应的 BS4 容器中
- java - java中的置换算法
- java - 如何在android studio中创建新活动
- python - 在外部 python 脚本中运行 Google Apps 代码
- c# - WPF UserControl Mouseover 更改子边框样式
- scala - 在 Scala Play 中返回 json 对象中的文件
- javascript - Javascript while 在控制台中不起作用
- powershell - 根据下一行使用 PowerShell 查找和替换
- javascript - iccube - Gantt Amchart - 如何切换滚动条 Axe?