编辑距离算法以及它的C#实现
原文: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#实现,由于是初学,代码质量不敢保证,倒是可以使用:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication1 8 { 9 class SString 10 { 11 private int GetMin(int a,int b,int c) 12 { 13 if (a <= b && a <= c) 14 return a; 15 else if (b <= a && b <= c) 16 return b; 17 else 18 return c; 19 } 20 public int init(string s1,string s2) 21 { 22 if (s1.Length == 0) 23 return s2.Length; 24 else if (s2.Length == 0) 25 return s1.Length; 26 else 27 { 28 int s1length = s1.Length; 29 int s2length = s2.Length; 30 int[,] martix = new int[s1length + 1, s2length + 1]; 31 for(int i=0;i<=s1length;i++) 32 { 33 martix[i, 0] = i; 34 } 35 for(int j=0;j<=s2length;j++) 36 { 37 martix[0, j] = j; 38 } 39 for(int i=1;i<s1length+1;i++) 40 for(int j=1;j<s2length+1;j++) 41 { 42 int temp; 43 if(s1[i-1]==s2[j-1]) 44 temp=0; 45 else 46 temp=1; 47 martix[i, j] = GetMin(martix[i - 1, j] + 1, martix[i, j - 1] + 1, martix[i - 1, j - 1] + temp); 48 } 49 return martix[s1length, s2length]; 50 } 51 } 52 } 53 class Program 54 { 55 static void Main(string[] args) 56 { 57 SString temp=new SString(); 58 string te= Console.ReadLine(); 59 string[] ans=te.Split(); 60 Console.WriteLine(temp.init(ans[0], ans[1])); 61 } 62 } 63 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥