【问题标题】:Fastest way to determine if two strings differ by an adjacent character swap? C++确定两个字符串是否因相邻字符交换而不同的最快方法? C++
【发布时间】:2016-01-26 10:41:51
【问题描述】:

我正在编写一个 C++ 算法,该算法非常接近确定 Damerau-Levenshtein 距离,但分为 3 个部分。 换句话说,Damerau-Levenshtein 距离返回从字符串 A 到字符串 B 的成本,使用 1. 删除/插入“apple”到“aple”,反之亦然 2. 将字符“rock”替换为“rack” 3. 相邻字符“art”换成“rat”

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

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

【问题讨论】:

  • “3 个部分”或“三个条件”或“3 个不同的部分”?大概你在所有这些术语中的意思都是一样的,这些都是不准确和不正确的。为什么不直接说“三步走”?英语多吗?

标签: c++ algorithm


【解决方案1】:

在我看来,这似乎是另一种可以通过使用rubber duck development and debugging 方法轻松解决的问题。带上你的橡皮鸭,或者出去买一只,如果你还没有的话;然后把它放在你的显示器前,向你的橡皮鸭解释你将如何测试你列表中的三个转换中的每一个。

橡皮鸭方法真的很简单!我将自己举一个例子,用于您列表中的第二个转换:两个单词是否仅通过替换一个字符而不同。

...

好的,我现在将我的橡皮鸭放在我的显示器旁边,我将向我的橡皮鸭解释我如何判断两个单词是否仅在替换一个字符时有所不同。在我说话的时候,你可以跟着听:

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

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

[我现在把我的橡皮鸭放回仓库]

看看这有多容易?现在,根据我向我的橡皮鸭解释过的详细的、逐步的算法,您难道没有看到编写几行代码是多么容易吗?这些词实际上将自己转化为代码!

你也可以这样做!去拿你的橡皮鸭,把它放在你的显示器前,然后向你的橡皮鸭解释你将如何测试你列表中的另外两个潜在的转换。

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

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多