动态规划之字符串操作
来源:互联网 发布:指南针炒股软件好吗 编辑:程序博客网 时间:2024/06/06 10:04
题目描述
对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。
测试样例:
"abc",3,"adc",3,5,3,100
返回:8
代码实现
private int findMinCost(String A, int n, String B, int m, int c0, int c1, int c2) { // write code here //c0插入,c1删除,c2修改 int[][] dp = new int[n + 1][m + 1]; char[] chars1 = A.toCharArray(); char[] chars2 = B.toCharArray(); dp[0][0] = 0;//由A得空串变为B的空串代价为0 //初始化第一列,由A中任意一个字符变为空字符只有一种方法,删除,删除的代价随着字符串长度的增加而增加 for (int i = 1; i <= n; i++) { dp[i][0] = i * c1; } //初始化第一行,由空串变为B中任意一个字符只有一种方法,插入,插入的代价随着字符串长度的增加而增加 for (int i = 1; i <= m; i++) { dp[0][i] = i * c0; } //整体计算 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { int tmp1;//记录是否修改的价值 if (chars1[i - 1] != chars2[j - 1]) {//对应位置不相等,代价为左上角的代价加上修改的代价 tmp1 = dp[i - 1][j - 1] + c2; } else {//对应位置相等,不需要进行任何操作,代价为左上角的代价 tmp1 = dp[i - 1][j - 1]; } //dp[i - 1][j] + c1:表示A串插入一个字符的价值 //dp[i][j - 1] + c0:表示A串删除一个字符的价值 int tmp3 = Math.min(dp[i - 1][j] + c1, dp[i][j - 1] + c0);//取两者的最小值 dp[i][j] = Math.min(tmp3, tmp1);//取三者的最小值 } } return dp[n][m];}
阅读全文
0 0
- 动态规划之字符串操作
- 动态规划之回文字符串
- 动态规划之字符串拆分
- 动态规划之字符串分词
- 动态规划之最长公共子字符串
- 动态规划入门之求字符串距离
- 合法字符串 【动态规划】
- 字符串计数(动态规划)
- 回文字符串-动态规划
- 动态规划--字符串拆分
- 动态规划--字符串拆分
- 《动态规划》之--字符串比较问题(扩展距离)
- 算法导论之动态规划 字符串拆分问题
- 算法题8 动态规划之字符串相似度
- 动态规划之寻找两个字符串最长公共子串
- 算法细节系列(14):动态规划之字符串处理
- C++动态规划算法之计算字符串距离
- 【动态规划】之字符串编辑距离(难度:2星)
- Java中遍历HashMap
- Bootstrap + AngularJS 实现简单的数据过滤----字符查找
- Calendar日期的java转换
- 【技术】Android Studio如何给log添加过滤项(Filters)?
- Linux下的自动化运维ansible工具
- 动态规划之字符串操作
- 基于mealy状态机的密码锁系统设计
- java基础编码规范小结
- 面试官培训-实战篇
- Java中Map的其他类型(WeakHashMap-IdentityHashMap-EnumMap)
- 电路与电子技术2
- 1086. Tree Traversals Again (25) <二叉树的建立>
- 史上最详细最全的Linux上安装Oracle的教程-centos7-humf
- 大牛文章分享