java题目 HJ52 计算字符串的编辑距离
描述
Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家 Levenshtein 提出的,故又叫 Levenshtein Distance 。
Ex:
字符串A: abcdefg
字符串B: abcdef
通过增加或是删掉字符 ”g” 的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。
要求:
给定任意两个字符串,写出一个算法计算它们的编辑距离。
数据范围:给定的字符串长度满足 1 \le len(str) \le 1000 \1≤len(str)≤1000
输入描述:
每组用例一共2行,为输入的两个字符串
输出描述:
每组用例输出一行,代表字符串的距离
示例1
输入:
abcdefg abcdef
输出:
1
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String[] args){ 5 Scanner sc=new Scanner(System.in); 6 while(sc.hasNext()){ 7 //输入字符串A 8 String s1=sc.next(); 9 //输入字符串B 10 String s2=sc.next(); 11 //计算字符串A和字符串B的距离 12 System.out.println(distance(s1,s2)); 13 } 14 } 15 private static int distance(String s1,String s2){ 16 int m=s1.length(); 17 int n=s2.length(); 18 //定义dp数组 19 int[][] dp=new int[m+1][n+1]; 20 //状态初始化 21 for(int i=1;i<=m;i++){ 22 dp[i][0]=i; 23 } 24 for(int j=1;j<=n;j++){ 25 dp[0][j]=j; 26 } 27 //状态转移 28 for(int i=1;i<=m;i++){ 29 for(int j=1;j<=n;j++){ 30 //如果相等,直接等于前一个位置的情况 31 if(s1.charAt(i-1)==s2.charAt(j-1)){ 32 dp[i][j]=dp[i-1][j-1]; 33 } 34 /* 35 如果不相等,要么B字符串插入A中i位置对应字符即dp[i][j]=dp[i-1][j]+1 36 要么A字符串插入B中j位置对应字符即dp[i][j]=dp[i][j-1]+1,要么s1字符串 37 i位置字符被s2字符串j位置字符替换,即dp[i][j]=dp[i-1][j-1]+1 38 */ 39 else{ 40 dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1; 41 } 42 } 43 } 44 return dp[m][n]; 45 } 46 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix