编辑距离

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 
例如将kitten一字转成sitting: 
sitten (k->s) 
sittin (e->i) 
sitting (->g) 
所以kitten和sitting的编辑距离是3。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。 
给出两个字符串a,b,求a和b的编辑距离。

状态定义:Fi,j表示第一个字符串的前i个字母和第二个字符串的前j个字母需要编辑的次数,求Fn,m,n和m分别是两个字符串的长度。

状态转移方程: 
当Fi,j-1=Fi-1,j时,Fi,j=Fi,j-1; 
当Fi,j-1!=Fi-1,j时,Fi,j=min{Fi-1,j-1,Fi,j-1,Fi-1,j}+1.

package com.basic.temp2;


import java.util.Scanner;


public class Demo  
{  
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
String b = sc.nextLine();
int La = a.length();
int Lb = b.length();
sc.close();
int[][] arr = new int[La+1][Lb+1];
for(int i=0;i<La+1;i++)
{
arr[i][0]=i;
}
for(int i=0;i<Lb+1;i++)
{
arr[0][i] =i;
}
int temp;
for(int i=1;i<La+1;i++)
{
for(int j=1;j<Lb+1;j++)
{
if(a.charAt(i-1)==b.charAt(j-1))
{
temp=0;
}
else
{
temp = 1;
}
arr[i][j] = Math.min(arr[i-1][j]+1, Math.min(arr[i][j-1]+1,arr[i-1][j-1]+temp));
}
}
System.out.println(arr[La][Lb]);
}
}  

今天真的是不顺利的一天哦,看来好几个题目然后都没写出来,不过还好,这个题目写出来了,遇上了君的名字这位女大佬,看到了她所写的这道题目的解法,很详细,也很用心,在网上很少能看到这么认真的大神。

言归正传,这道题是一道动态规划题目,首先要找到状态的定义,然后是状态转移方程的定义(这题的这个有点难理解),

先构造一个二位矩阵矩阵的航头和行尾用来存储标志位,d[i-1][j],d[i][j-1],d[i][kj]分别表示替换,增加,删除,

如果两个字符串的位不同,则需要进行操作,temp为1,否则为0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值