如何计算两个字符串之间的差异?

2023-11-22

我想在 Delphi 中创建一个函数来计算两个字符串的不同级别。如果两个字符串相等(忽略大小写),则应返回 0,但如果不相等,则应返回不同字符的数量。此功能对于检查拼写非常有用。

function GetDiffStringLevel(S1,S2:string):Integer;
begin
  if SameText(S1,S2) then Exit(0);
  // i want get different chars count
end

示例代码:

Diff:=GetDiffStringLevel('Hello','Hello');// Diff:=0;
Diff:=GetDiffStringLevel('Hello','2Hello');// Diff:=1;
Diff:=GetDiffStringLevel('Hello','H2ello');// Diff:=1;
Diff:=GetDiffStringLevel('Hello','Hello W');// Diff:=2;
Diff:=GetDiffStringLevel('Hello','World');// Diff:=6; or 5

快速而紧凑的实施。

大约是使用普通字符串的粉碎机实现速度的 3 倍。 如果其中一个字符串为空,速度会提高 100 倍以上。

Smasher 的功能不区分大小写,但这也很有用。

function LevenshteinDistance(const s, t: string): integer;inline;
var
  d   : array of array of integer;
  n, m, i, j : integer;
begin
  n := length(s);
  m := length(t);
  if n = 0 then Exit(m);
  if m = 0 then Exit(n);

  SetLength(d, n + 1, m + 1);
  for i := 0 to n do d[i, 0] := i;
  for j := 0 to m do d[0, j] := j;

  for i := 1 to n do
    for j := 1 to m do
      d[i, j] := Min(Min(d[i-1, j]+1, d[i,j-1]+1), d[i-1,j-1]+Integer(s[i] <> t[j]));

  Result := d[n, m];
end;

注:inline该指令在我的机器上将执行时间减少到 70% 以下,但仅限于 win32 目标平台。如果您编译为 64 位 (Delphi XE2),内联实际上会稍微慢一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算两个字符串之间的差异? 的相关文章

随机推荐

  • Python算法计算csv中特定单词的出现次数

    我刚刚开始学习Python 我很好奇什么是计算 CSV 文件中特定单词出现次数的有效方法 而不是简单地使用 for 循环逐行遍历并读取 更具体地说 假设我有一个 CSV 文件 其中包含两列 姓名 和 成绩 包含数百万条记录 如何计算 Gra
  • 无法获取透明DialogFragment

    我有一个看起来像这样的对话框片段 AlertDialog ad builder create Drawable d new ColorDrawable Color BLACK d setAlpha 130 ad getWindow setB
  • 在 Android 教程应用程序上使图像全屏显示

    使用 Hello World Gridview 教程示例 我尝试使图像在单击时全屏显示 而不是显示图像在数组中的位置 由于我对Android不熟悉 而且这是我第一次尝试用它进行开发 所以我很茫然 我对 Java 很熟悉 并且我尝试过这样做
  • Oracle SQL:从带有嵌套表的表中选择

    我想知道如何从具有类型列的表中创建 select 语句 该列的类型定义为 create or replace TYPE MYCOL as table of MYTYPE create or replace TYPE MYTYPE as OB
  • css-sprite 是一种好技术吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 css sprite 是个好技术吗 我在以下位置阅读了有关其优点的信息http spriteme org 我还在 stackoverflow 中看到了很多关于 css sprites 的问
  • 将 Intellij-Idea UI 表单导出到 Eclipse

    我有一个 Java 项目要做 所以我决定使用Inltellij Idea中的Designer来帮助我快速完成表单和窗口 并有更多的时间来开发应用程序 我面临的问题是老师使用 Eclipse 所以我认为在开发结束时我可以导出我的 Intell
  • LDAP 问题,ldap_bind 无效 dn 语法

    我知道我的错误非常简单 但我试图找到问题所在 但我没有看到它 也许你可以帮助我 我正在尝试使用 php 创建一个函数 这样我就可以连接到 LDAP 并找到所需的信息 我的 php 代码如下 ldapconfig host 127 0 0 1
  • 如何根据访问者的位置显示本地时间?

    我们正在开发一个网站 供世界各地的人们使用 网站中有一个聊天部分 我们希望消息显示带有时间戳 我在数据库中存储每条消息的时间戳 根据访问者当地时间 向访问者显示每条消息的正确时间的方法是什么 我不想询问用户他的时区 有没有办法只使用 PHP
  • 如何在 SQL Server 2005 中存储时区

    我正在构建一个网络应用程序 用户可以在其中输入事件 包括 活动标题 开始日期 时间 描述 用户想要输入开始日期 时间 包括与事件位置相对应的时区 这些活动是全球性的 因此时区可能会因活动而异 在SQL Server后端数据库中 我使用dat
  • 如何在 python 中抑制控制台/cmd 错误消息

    如何抑制 python 中 chromedriver 和 pyinstaller exe 的错误消息 我注意到 当我在 pyinstaller 中使用 chromedriver 并运行它时 我会收到错误消息列表 我一直在尝试删除它们 但到目
  • 删除标点符号但保留表情符号?

    是否可以删除所有标点符号但保留表情符号 例如 D p structure list text structure c 4L 6L 1L 2L 5L 3L Label c Inappropriate announce AirAsia your
  • 如何在单个IP(Apache + Passenger)上部署多个rails应用程序?

    我想在一台服务器上部署多个 Rails 应用程序 如果我有一个域名 我可以轻松地使用子域作为虚拟主机中的服务器名称来完成此操作 我的问题是我没有域名 我可以做类似的事情吗 70 42 89 11 app 1 作为一个服务器名称 70 42
  • 如何在 matplotlib 的子图下方添加图例?

    我正在尝试在 3 列子图下方添加图例 我已经尝试过以下方法 fig ax plt subplots ncols 3 ax 0 plot data1 ax 1 plot data2 ax 2 plot data3 ax sub plt sub
  • 如何使用 ADO 和 VB 将 NULL 或空字符串传递给存储过程输入参数?

    我在 Sql Server 2005 中有一个存储过程 其 varchar 输入参数定义为 Value varchar 24 NULL 在我的 VB6 应用程序中 我尝试使用 ADO 函数设置参数 Set prmParamVal cmdCh
  • loadHTMLString baseURL:nil 在 iOS5 中不起作用

    我遇到了 UIWebView 的问题 我想在 UIWebView 中渲染我自己的 html 代码 如果我使用下面的代码 它工作正常 NSBundle thisBundle NSBundle mainBundle NSString path
  • F# 具有特定属性的记录类型的类型约束

    我正在尝试创建一个通用函数 它需要其类型参数 它是记录类型 并且它具有特定的属性 这是生成相关编译器错误的示例 let foo lt a gt a a a a with bar baz a 编译这个我得到一个错误说明The record l
  • 以月和日计算年龄

    function getAge dateString var today new Date var birthDate new Date dateString var age today getFullYear birthDate getF
  • 我可以序列化画布上绘制的路径,以便在重新启动应用程序时重新绘制路径

    我有一个应用程序 它使用画布来绘制用户完成的涂鸦 我已将外部文件中的路径序列化并将其保存在 SD 卡中 当用户再次启动应用程序时 单击 重新绘制 按钮 我希望在画布上重新绘制保存的路径 我无法重绘路径 我在调试和检查时从文件中检索路径 但我
  • ActionBarSherlock + Google Maps API v2 重复 ID

    我正在尝试将 ActionBarSherlock 与 Google Maps API v2 片段集成 我有一个包含 2 个片段的布局 一个用于列表布局 另一个用于 SupportMapFragment 当我第一次单击列表项时进展顺利 但当我
  • 如何计算两个字符串之间的差异?

    我想在 Delphi 中创建一个函数来计算两个字符串的不同级别 如果两个字符串相等 忽略大小写 则应返回 0 但如果不相等 则应返回不同字符的数量 此功能对于检查拼写非常有用 function GetDiffStringLevel S1 S