确定两个字符串是否因相邻字符交换而不同的最快方法? C ++

时间:2016-01-26 02:02:36

标签: c++ algorithm

我正在编写一个C ++算法,该算法非常接近于确定Damerau-Levenshtein距离,但分为3个部分。 换句话说,Damerau-Levenshtein距离返回使用的字符串A到字符串B的成本 1.删​​除/插入" apple"到" aple"反之亦然 2.替换角色"摇滚" to" rack" 3.交换相邻角色"艺术"到了#34;老鼠"

但是,我写的算法必须确定字符串A是否可以使用上述三个条件的任意组合变换为字符串B.

关于如何确定3个不同部分的Damerau-Levenshtein距离的任何建议?

1 个答案:

答案 0 :(得分:2)

这对我来说看起来像是另一种可以使用rubber duck development and debugging方法轻松解决的问题。如果你还没有橡皮鸭,可以去买橡皮鸭;然后将它放在显示器前面,并向你的橡皮鸭解释如何测试列表中三个转换中的每一个。

橡皮鸭方法真的很容易!我自己举一个例子,为你列表中的第二个转换:两个单词是否只有一个字符的替换才有所不同。

...

好的,我的橡皮鸭现在坐在我的显示器旁边,我要向我的橡皮鸭解释,如果两个单词的区别仅在于替换一个字符,我将如何判断。你可以一边听,一边说:

1)好的,我要做的第一件事,鸭先生,是验证两个单词的字符数相同。如果他们不是,我就不需要再继续了。因为单词的数量不同,所以它们只能通过单个字符的替换而不同,这不会改变单词中的字符数。你看,鸭先生,这意味着两个单词必须具有相同的确切字符数。如果他们不这意味着我的两个单词必须以其他方式不同,除了单个字符替换。

2)好的,现在我知道这两个词长度相同。接下来,我要做的是检查两个单词的第一个字符是否相同。然后,我将检查两个单词的第二个字符是否相同,依此类推,直到我检查每个单词的每对相应字符。然后,我只需要跟踪我一直看到不同的一对角色的次数。如果我只看到一对不同的角色,那么鸭子先生必须意味着有一对不同的角色 - 不多也不少 - 所以第一个单词可以通过改变转换成第二个单词只有一个角色。

[我现在将我的橡皮鸭放回存放处]

看看它有多容易?现在,根据我在上面对我的橡皮鸭解释的详细的逐步算法,编写几行代码,你不觉得有多容易吗?这些词实际上将自己翻译成代码!

你也可以这样做!拿起你的橡皮鸭,把它放在你的显示器前面,并向你的橡皮鸭解释你将如何测试你名单上的其他两个潜在的转变。

最后,在向你的橡皮鸭解释如何检查每一个可能的三个变换后,给出一对单词,你可以通过向你细心的橡皮鸭解释现在你如何回答这个问题来完成你的故事你问自己。