当前位置: 首页 > 知识库问答 >
问题:

给定两次交换操作时两个字谜的最小编辑距离

闻昊英
2023-03-14

给定两个字谜S和P,当只有两个操作时,从S到P的最小编辑距离是多少:

  1. 交换两个相邻的元素
  2. 交换第一个和最后一个元素

如果这个问题被简化为只有第一个操作(即交换两个相邻的元素),那么这个问题“类似于”经典算法问题“排序一个数字数组的最小交换次数”(解决方案链接如下所示)

通过使用最小交换交换相邻元素来排序序列

我的意思是“类似”,因为当两个字谜都有不同的字符时:

S:  A B C D
P : B C A D 

然后我们可以这样定义P中的排序

P: B C A D
   1 2 3 4

然后根据这个顺序,字符串S变为

S: A B C D
   3 1 2 4

然后我们可以使用链接中给出的解决方案来解决这个问题。

然而,我有两个问题:

>

S: C D B C D A A

P:A-A-C-D-B-C-D

如何用两个交换操作来解决这个完整的问题?

共有1个答案

袁桐
2023-03-14

一种方法是使用http://en.wikipedia.org/wiki/A*_搜索算法。你的成本函数是从每个元素到可能到达的最近元素的最短距离之和的一半。一半的原因是,绝对理想的掉期组合在任何时候都会让这两个要素更接近它们想要去的地方。

 类似资料:
  • 本文向大家介绍在C ++中制作两个不带字符删除的两个字符串字谜所需的最少操作数,包括了在C ++中制作两个不带字符删除的两个字符串字谜所需的最少操作数的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个长度相等的字符串,我们必须找到使两个字符串相符的最小数目的更改,而不删除任何字符。字谜是两个具有相同字符集的字符串。假设两个字符串为“ HELLO”和“ WORLD”,此处需要更改的数目为3,因

  • 我的问题是,在这段代码中,最初我们将boolean isAnagram设为false,然后设置条件,但是我们得到的结果是错误的。因为很清楚,它们不是anagram,但是代码输出是“anagram”。

  • 问题内容: 我正在尝试了解go的内部原理。考虑以下代码 上面的代码完美地交换了2个数字,a变成5,b变成10。我无法理解它是如何工作的。在第二行代码中考虑,如果将a首先分配给b,则b将为10。现在,如果将b分配给a,那么a也不应也为10。 请帮助我了解它是如何工作的 谢谢 问题答案: TL; DR :反汇编表明CPU必须足够聪明才能看到正在发生的事情,并使用寄存器来避免覆盖内存中的现有值。 这个问

  • 我在一次编码挑战中被问到这个问题,但我的解决方案通过了8/14个测试用例,无法100%解决它。我需要理解这个问题背后的逻辑。我的方法是找出串联0或次数是否可以给出如果是,我返回t的最长重复子字符串。 给定字符串和字符串,查找最小字符串的长度,这样,如果将级联任意次数,我们将得到和。如果不可能返回-1; 如果字符串被级联两次,则结果>so不能被整除。返回-1 如果字符串被级联两次,则结果=,因此可被

  • 问题内容: 我想使用接口交换两个数字,但是接口概念令我感到困惑。 http://play.golang.org/p/qhwyxMRj-c 这是代码和游乐场。如何使用接口并交换两个输入数字?我需要定义两个结构吗? 问题答案: 首先,类型只是接受所有值的类型,因为它是带有空方法集的接口,并且每种类型都可以满足该要求。例如没有任何方法,也没有。 对于交换两个变量的值的方法,首先需要确保这些变量实际上是可

  • 问题内容: 情境 我有一个自定义钩子,返回一个动作。父组件“容器”利用自定义钩子并将动作作为道具传递给子组件。 问题 当从子组件执行该操作时,实际分派发生两次。现在,如果子级直接使用该钩子并调用了该动作,则分派仅发生一次。 如何复制它: 打开下面的沙箱,然后在chrome上打开devtools,这样您就可以看到我添加的控制台日志。 https://codesandbox.io/s/j299ww3l