【动态规划】最小编辑代价
来源:互联网 发布:保险网络推广 编辑:程序博客网 时间:2024/06/08 02:48
- 空间限制:32768K
题目描述
对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。
给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。
测试样例:
"abc",3,"adc",3,5,3,100
返回:8
import java.util.*;public class Main { public static void main(String args[]){ String A="bbca"; String B="cabacab"; System.out.println(new Main().findMinCost(A,A.length(),B,B.length(),1,2,7)); System.out.println(); A="abc"; B="adc"; System.out.println(new Main().findMinCost(A,A.length(),B,B.length(),5,3,100)); } public int findMinCost(String A, int n, String B, int m, int c0, int c1, int c2) { int len=n>m?n:m; /*d[i][j]表示字符串A的前i个字符构成的子串 和字符串B的前j个字符构成的子串的最短编辑距离 则d[n][m]为所求最终结果*/ int d[][]=new int[len+1][len+1]; /*可以直接替换或者是先删除后添加,取代价较小者*/ c2=Math.min(c0+c1,c2); /*边界条件*/ for(int i=0;i<=len;i++){ /*把A变成B,B为空,只能保持B不变,A删除字符*/ d[i][0]=i*c1; } for(int j=0;j<=len;j++){ /*A为空,要把A变为B,保持B不变,A添加字符*/ d[0][j]=j*c0; } /*转移方程*/ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(A.charAt(i-1)==B.charAt(j-1)){ d[i][j]=d[i-1][j-1]; }else{ d[i][j]=min(d[i-1][j]+c1,/*A多了一个字符,删除*/ d[i][j-1]+c0,/*A少了一个字符,插入*/ d[i-1][j-1]+c2);/*修改*/ } } } printTable(d,len,len); return d[n][m]; } public int min(int a,int b,int c){ int t=a>b?b:a; return t>c?c:t; } public void printTable(int[][] d,int x,int y){ for(int i=0;i<x;i++){ for(int j=0;j<y;j++){ System.out.print(d[i][j]); System.out.print("\t"); } System.out.println(); } }}
0 0
- 【动态规划】最小编辑代价
- 最小编辑代价---动态规划
- 最小编辑代价 动态规划
- 最小编辑代价(动态规划)
- 最小编辑代价(动态规划)
- 最小编辑代价(动态规划)
- 递归与动态规划---最小编辑代价
- 动态规划系列问题-最小编辑代价
- 动态规划算法,最小代价
- 动态规划--最小调整代价
- 动态规划-最小代价子母树
- 最小代价树(动态规划)
- 最小代价树(动态规划)
- 最小编辑代价
- 最小编辑代价
- 最小编辑代价
- 最小编辑代价
- godfrey_88 最小编辑代价
- Java并发:原子变量和非阻塞同步机制
- Activity生命周期
- 二叉树搜索
- Dependency Walker使用说明
- leetcode_107 Binary Tree Level Order Travelsal II
- 【动态规划】最小编辑代价
- 在一个窗口显示多个视频子窗口
- ADB基本命令
- iOS序列桢动画创建方式
- MFC——ComBox用法大全
- 编译mysql5.7.11的Qt5.6驱动QMYSQL
- springMVC4(11)使用注解完成数据格式化
- 垃圾回收算法
- hdoj 1426 Sudoku Killer