假设我有一个输入字符串,例如: aab
给我一个目标字符串,例如:bababa
然后给我一组转换规则。例如:
ab -> bba
b -> ba
在 C 语言中,我怎样才能找到一种算法,该算法将找到需要在输入字符串中应用以获得目标字符串的最少转换次数。
例如,在这个例子中,数字是 3。因为我们会这样做:
1 - Apply rule 1 (abba)
2 - Apply rule 1 again (bbaba)
3 - Apply rule 2 (bababa)
给定一个输入和一个目标,可能没有解决方案,这也应该引起注意。
我几乎迷失在这样做的策略中。我想到了创建一个自动机,但我不确定在这种情况下我将如何应用。我认为这是一个有趣的问题,我一直在网上研究,但我能找到的只是给定规则的转换,而不是如何确保它是最低限度的。
编辑:作为建议的答案之一,我们可以从初始字符串开始制作一个图表,并创建将转换应用于前一个节点的结果的节点。但是,从我的角度来看,这带来了一些问题:
想象一下,我有一个看起来像 a --> ab 的转换。我的初始字符串是'a'。我的输出字符串是'c'。所以,我一直在做这样的转换(增长图表):
a -> ab ab -> abb abb -> abbb ...
我怎么知道何时需要停止构建图表?
- 假设我有以下字符串 aaaa,并且我有一个像 aa->b 这样的转换规则。我将如何创建新节点?我的意思是,我将如何在该输入字符串中找到子字符串并记住它们?