编辑距离

本文深入探讨了字符串编辑距离的概念,即Levenshtein距离,由Vladimir Levenshtein于1965年提出。编辑距离是指将一个字符串转换为另一个字符串所需的最小字符操作数,包括插入、删除和替换。文章详细解释了如何计算两个字符串的编辑距离,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出。是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数。其中,字符操作包括:

  • 删除一个字符     a) Insert a character
  • 插入一个字符     b) Delete a character
  • 修改一个字符     c) Replace a character

例如对于字符串"if"和"iff",可以通过插入一个'f'或者删除一个'f'来达到目的。

  一般来说,两个字符串的编辑距离越小,则它们越相似。如果两个字符串相等,则它们的编辑距离(为了方便,本文后续出现的“距离”,如果没有特别说明,则默认为“编辑距离”)为0(不需要任何操作)。不难分析出,两个字符串的编辑距离肯定不超过它们的最大长度(可以通过先把短串的每一位都修改成长串对应位置的字符,然后插入长串中的剩下字符)。

问题描述:

给定两个字符串A和B,求字符串A至少经过多少步字符操作变成字符串B。

  代码

 

 public static  int getSimlerDistance(String a,String b){
         int n = a.length();
         int m = b.length();
         int dp[][] = new int[m+1][n+1];
          if(a.length()==0 && b.length()!=0){
              return b.length();
          }else if(a.length()!=0&& a.length()==0){
              return a.length();

          }else if(a.length()==0&& b.length()==0){
              return 0;
          }else{
              //初始化
              for (int i = 0; i <=m;i++) {
                   dp[i][0] = i;

              }
              //初始化
              for (int j = 0; j <=n;j++){
                  dp[0][j] =j;

              }
              int temp=0;
              for (int i = 1; i <m;i++){
                  for (int j = 1; j <n;j++){
                      if(a.charAt(i-1) ==b.charAt(j-1)){
                          temp=1;
                          //dp[i][j] = dp[i-1][j-1];
                      }else{
                          temp=0;

                      }
                      dp[i][j] = Math.min(Math.min(dp[i][j-1]+1,dp[i-1][j]+1),dp[i-1][j-1]+temp);
                  }


              }
              return dp[m][n];

          }

     }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值