将一个字符串转换为另一个字符串

时间:2016-02-23 18:45:06

标签: java algorithm recursion

有一个字符串,其字符只能是ab_,字符串中只有一个_

在每一步,我们都可以按如下方式修改字符串:

_可以与其相邻字符交换,示例a_ba可以更改为_abaab_a

只有当相邻字符与相邻字符旁边不同时,才能将_字符与相邻字符旁边交换。 (例如aba_ab可以转换为a_ababababa_,但ab_aab无法转换为abaa_b,因为a无法跳过a {1}})。

您将获得两个字符串,即初始状态和最终状态(长度将相同),您必须输出将初始状态下的字符串更改为最终状态字符串所需的最少步骤数。

示例:

string s1 ,s2 ;
input: s1 = a_b , s2 = ab_
output: 1
input: s1 = aba_a , s2 = _baaa
output: 2

1 个答案:

答案 0 :(得分:1)

当您将问题简单地视为图形问题时,可以解决这个问题。

顶点是所有可能的状态,并且如果您可以使用单个移动从一个顶点到另一个顶点,则存在来自两个顶点的边。
现在的问题是在这个图中找到从源到目的地的最短路径。

您的代码基本上是在此图表上实现DFS,但DFS并非最佳。你应该尝试实现一个BFS,它保证是最优的(总是找到最短的路径)。

更复杂的优化(为了更快的运行时间)包括A *搜索算法和双向搜索,但您现在应该避免使用这些并专注于更简单的BFS,恕我直言。