原文:https://www.cnblogs.com/shihuajie/p/5772173.html
注意,原文中有以下表述不当的地方
- “扫描两字符串(n*m级的),如果:str1 == str2[j]”应该改为“扫描两字符串(n*m级的),如果:str1[i]== str2[j]”.并且,这里的扫描如果放在矩阵里面实现的话,其实是i-1和j-1(因为矩阵下标为1的位置对应的实际是字符串下标为0的位置
- 第二个图标中,(1,2)和(2,1)这两个位置的元素其实是没有变化的,还是两个1。这里是借用了这个位置来写东西,但是会造成误导
最后附上自己的C#实现,由于是初学,代码质量不敢保证,倒是可以使用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class SString
{
private int GetMin(int a,int b,int c)
{
if (a <= b && a <= c)
return a;
else if (b <= a && b <= c)
return b;
else
return c;
}
public int init(string s1,string s2)
{
if (s1.Length == )
return s2.Length;
else if (s2.Length == )
return s1.Length;
else
{
int s1length = s1.Length;
int s2length = s2.Length;
int[,] martix = new int[s1length + , s2length + ];
for(int i=;i<=s1length;i++)
{
martix[i, ] = i;
}
for(int j=;j<=s2length;j++)
{
martix[, j] = j;
}
for(int i=;i<s1length+;i++)
for(int j=;j<s2length+;j++)
{
int temp;
if(s1[i-]==s2[j-])
temp=;
else
temp=;
martix[i, j] = GetMin(martix[i - , j] + , martix[i, j - ] + , martix[i - , j - ] + temp);
}
return martix[s1length, s2length];
}
}
}
class Program
{
static void Main(string[] args)
{
SString temp=new SString();
string te= Console.ReadLine();
string[] ans=te.Split();
Console.WriteLine(temp.init(ans[], ans[]));
}
}
}