字符串最小变换次数
题目描述
给定两个字符串,已知可以使用三种方式进行变换
1. 插入一个字符
2. 删除一个字符
3. 更改一个字符
请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2
1. 插入一个字符
2. 删除一个字符
3. 更改一个字符
请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2
输入描述:
输入两个字符串,字符串的长度<=1000
输出描述:
最小变换次数
示例1
输入
hello helle
输出
1
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str1 = "#" + scanner.next(); String str2 = "#" + scanner.next(); int[][] dp = new int[str1.length()][str2.length()]; // 初始化 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.charAt(i) == str2.charAt(j)) dp[i][j] = dp[i - 1][j - 1]; else { dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i][j - 1], dp[i - 1][j])) + 1; } } } System.out.println(dp[str1.length() - 1][str2.length() - 1]); } }