Calmer的文章

  • 首页
  • 文章归档
  • 关于页面

  • 搜索
体验游戏 笔记 推荐 工具链 工具使用 小游戏 插件 UI 软件 教程

最短编辑距离

发表于 2020-08-01 | 分类于 算法 | 0 | 阅读次数 818

题目

给定两个字符串s1 和 s2, 计算出将s1转换成s2所使用的最少操作数。
你可对一个字符串进行如下三种操作

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符

class MinEditDistance
{
    //递归 自顶向下
    string str1;
    string str2;
    public int GetMinEditDistance(strign str1,string str2)
    {
        this.str1 = str1;
        this.str2 = str2;

        return MinDis(str1.Length-1,str2.Length-1);
    }

    public int MinDis(int i,int j)
    {
        if(i < 0) return j+1;
        if(j < 0) return i+1;

        if(str[i]==str[j])
            return MinDis(i-1,j-1);
        else
        {
            return Min(MinDis(i,j-1)+1,MinDis(i-1,j)+1,MinDis(i-1,j-1)+1);            
        }
    }

    public int Min(int a,int b,int c)
    {
        int min = a;
        if(b<min)
            min = b;
        if(c<min)
            min = c;
        return min;
    }

//自底向上
    int[,] dp;
    public int CalMinDis(string str1,string str2)
    {
        this.str1 = str1;
        this.str2 = str2;
        dp = new int[str1.Length+1,str2.Length+1];
        dp[0,0] = 0;
        for(int i=1; i<=str1.Length; i++)
        {
            dp[i,0] = i;
        }
        for(int i=1; i<=str2.Length; i++)
        {
            dp[0,i] = i;
        }

        for(int i=1; i<=str1.Length; i++)
        {
            for(int j=1; j<=str2.Length; j++)
            {
                if(str1[i-1]==str2[j-1])
                    dp[i,j] = dp[i-1,j-1];
                else
                {
                    dp[i,j] = Min(dp[i,j-1]+1, dp[i-1,j]+1, dp[i-1,j-1]+1);
                }
            }
        }

        return dp[str1.Length;str2.Length];
    }

}
  • 本文作者: Calmer
  • 本文链接: https://mytechplayer.com/archives/最短编辑距离
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
寻找最长回文子串
桌游策划
  • 文章目录
  • 站点概览
Calmer

Calmer

88 日志
7 分类
10 标签
RSS
Creative Commons
0%
© 2020 — 2025 Calmer
由 Halo 强力驱动
蜀ICP备20010026号-1川公网安备51019002006543
Copyright © 2020-2025 Calmer的文章