• 编辑距离算法以及它的C#实现


    原文:https://www.cnblogs.com/shihuajie/p/5772173.html

    注意,原文中有以下表述不当的地方

    1. “扫描两字符串(n*m级的),如果:str1 == str2[j]”应该改为“扫描两字符串(n*m级的),如果:str1[i]== str2[j]”.并且,这里的扫描如果放在矩阵里面实现的话,其实是i-1和j-1(因为矩阵下标为1的位置对应的实际是字符串下标为0的位置
    2. 第二个图标中,(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 }
  • 相关阅读:
    django学习之命令
    832. 翻转图像
    JUC线程池深入刨析
    CountDownLatch、CyclicBarrier、Samephore浅谈三大机制
    深入理解Atomic原子类
    浅谈volatile关键字
    web应用启动的时候SpringMVC容器加载过程
    MySQL锁机制
    TCP拥塞控制
    HTTPS的加密流程(通俗易懂,不可错过)
  • 原文地址:https://www.cnblogs.com/jiading/p/9732198.html
Copyright © 2020-2023  润新知