【问题标题】:Check if there is only 1 character difference between two strings in PHP检查PHP中两个字符串之间是否只有1个字符差异
【发布时间】:2018-10-09 06:24:58
【问题描述】:

我试图弄清楚如何计算两个字符串之间的差异是否恰好是 1 个字符(或缺少它)

该功能应涵盖以下情况:

STRIN1G / STRIN2G
ONE TOO THREE / ONE TWO THREE
NATALI / NATALIE
ASTRING / STRINGB

levenshtein 函数(您将在其中检查它是否返回 1)适用于所有情况,但不能涵盖最后一种情况。

【问题讨论】:

标签: php string difference


【解决方案1】:

此算法可能不适用于所有情况,但符合您给定的示例,应该让您更接近最终目标。看看similar_text,它比levenshtein 更贵,但更灵活。在这里,我们将根据字符串的不同长度进行调整,以防其中一个是另一个的完整子字符串。

演示:https://3v4l.org/IZ943

$strings = [
    'STRIN1G' => 'STRIN2G',
    'ONE TOO THREE' => 'ONE TWO THREE',
    'NATALI' => 'NATALIE',
    'ASTRING' => 'STRINGB',
];

foreach ($strings as $string => $variant) {
    $length = strlen($string);
    $adjustment = abs($length - strlen($variant));
    $matching = similar_text($string, $variant);
    var_dump($length - $matching + $adjustment);
}
int(1)
int(1)
int(1)
int(1)

【讨论】:

  • 非常感谢,正是我所需要的。老实说,我认为这个问题的解决方案必须非常明显和直截了当,但它似乎并不完全
  • 编辑:但它不会涵盖这种情况:'SOME STRING' => 'SOME STRNG'
  • 是的,你是对的,那是行不通的。两者之间可能存在一些差异,或者更糟糕的是重新实现 levenshtein 以便您可以将插入和删除对计为 1 点,或分别计为 1 点。我现在没有时间深入研究,但这是一个有趣的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2010-11-28
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多