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

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(使用前将#替换为@)

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

  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • String.substring 在 Java 中到底做了什么?

    我一直想如果我这样做String s Hello World substring 0 5 然后我就得到一个新字符串s Hello Java API 文档中也记录了这一点 返回一个新字符串 该字符串是该字符串的子字符串 但当我看到下面两个链接
  • 将由空格分隔的整数字符串更改为 int 列表[重复]

    这个问题在这里已经有答案了 我该如何做类似的东西 x 1 2 3 45 87 65 6 8 gt gt gt foo x 1 2 3 45 87 65 6 8 我完全陷入困境 如果我按索引执行此操作 那么超过 1 位数字的数字将被分解 请帮
  • fgets 读取的最大大小

    Using fgets要输入字符串 我对读取的字符串长度有疑问 例如 考虑以下程序 char str 50 int i int len printf Enter name n fgets str 11 stdin len strlen st
  • 在Python中从字符串中删除除字母数字字符之外的所有内容

    使用 Python 从字符串中去除所有非字母数字字符的最佳方法是什么 中提出的解决方案这个问题的 PHP 变体 https stackoverflow com questions 840948可能会进行一些小的调整 但对我来说似乎不太 Py
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • python 2.7.5 中的 str() 与 repr() 函数[重复]

    这个问题在这里已经有答案了 有什么区别str and repr python 2 7 5 中的函数 python org 上的说明 The str 函数的目的是返回值的表示 这些值是相当的人类可读的 while repr 是为了生成 表示可
  • 如何使用 Swift 4 将字符串拆分为英语和非英语?

    我有一个包含英语和阿拉伯语的字符串 我正在使用 API 这就是为什么我无法在其中设置指标的原因 我想要得到的是 阿拉伯语和英语分成两部分 这是一个示例字符串 Bismika rabbee wadaAAtu janbee wabika arf
  • 如何将整数日期转换为格式化日期字符串(即 2012009 到 2/01/2009)

    有任何想法吗 我想不出任何办法 我有一个从 csv 文件加载的日期列表 它们被保存为所有整数 或者更确切地说是一串整数 即 2009 年 1 月 1 日 1012009 关于如何将 1012009 变成 1 01 2009 有什么想法吗 T
  • 具有多行值的 PEP8 多行字典

    我使用 Black for Python 它符合 PEP8 https github com psf black the black code style 它删除两行长值字符串的第二行的缩进 mydict key0 value0 key1
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • Word 2010 自动化:“转到书签”

    我有一个用 Delphi 7 编写的程序 它打开一个基于模板的新 Word 文档 文档打开后 系统会自动跳转到书签 在模板中预定义 并在其中添加一些文本 以下代码在 Word 2003 中工作正常 但会导致invalid variant o
  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • 为什么不能用反斜杠结束原始字符串? [复制]

    这个问题在这里已经有答案了 我在这里很困惑 尽管原始字符串会转换每个 to 但是当这个 最后出现它会引发错误 gt gt gt r so m e te xt so m e te xt gt gt gt r so m e te xt Synt
  • 在 Objective-C 中比较 2 个字符串

    我写了以下代码 if depSelectedIndice gt 1 comSelectedIndice gt 1 NSLog depart elemet d depSelectedIndice NSLog depart elemet d c
  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab

随机推荐

  • 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