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

前端之家收集整理的这篇文章主要介绍了如何计算两个字符串之间的差异?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在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

解决方法

快速紧凑的实施.

大约是smasher使用普通字符串实现的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;

注意:内联指令将我的计算机上的执行时间减少到不到70%,但仅适用于win32目标平台.如果编译为64位(Delphi XE2),内联实际上会使它变得有点慢.

猜你在找的Delphi相关文章