`
xdgj
  • 浏览: 36146 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

两个字符串的最短串编辑距离

    博客分类:
  • Java
阅读更多

   假定有两个字符串s1,s2,求出由s1变为s2所需要花费的最小代价。删除一个字符的代价为1,增加一个字符的代价为2,替换一个字符的代价为2。比如由“abc”变为“abe”,你可以删除c,然后添加e,这样代价是3;也可以将c替换成e,这样代价是2,显然2比较小。具体串编辑问题请参阅算法书籍。本代码运用的是动态规划的思路,这里状态转移方程略去,如果需要给出具体的编辑轨迹,那需要用一个二维数组来记录,有兴趣的读者可以写下。(代码没有进行全面的测试,“可能”存在问题)

 

public class Test {

	public int min(int x,int y,int z)
	{
	  int t=x;
	  if(y<t)t=y;
	  if(z<t)t=z;
	  return t;
	}
	
public int editstr(String s1,String s2,int n,int m)
{
	if(n<0||m<0)
		return 0;
	if(s1.charAt(n)==s2.charAt(m))
	{
	 return editstr(s1,s2,n-1,m-1);
	}
	else 
	{
	  int e1=editstr(s1,s2,n,m-1)+2;//添加s2[m]到s1末尾,完成编辑
	  int e2=editstr(s1,s2,n-1,m)+1;//删除s1[n]完成编辑
	  int e3=editstr(s1,s2,n-1,m-1)+2;//将s1[n]换成s2[m]
	  return min(e1,e2,e3);
	}
}
	
public static void main(String args[])
{
  String s1="abe";
  String s2="abc";
  Test t=new Test();
  int result=t.editstr(s1,s2,s1.length()-1,s2.length()-1);
  System.out.println(result);
                                   
}

}
分享到:
评论

相关推荐

    使用最短编辑距离算法判断两个字符串的相似度

    使用最短编辑距离算法判断两个字符串的相似度

    动态规划—最短编辑问题—(非常详细分析以及代码)

    * 定义两个字符串s1 ,s2 * 比较两字符串的某两个相同位置时:(例如s1[i] s2[j] 这时i=j)有三种办法 * 1.把字符ch1变成ch2, 使得s1与s2字符串在该处相同 * 2.删除s1当中的该字符ch1,使得s1与s2字符串在该处相同 ...

    钢条切割问题leetcode-Basic_Algorithms:算法导论的python代码

    求两个字符串的编辑距离 graph图,节点之间的最短距离 两个字符串的最大子字符串 判断一个链表是否有环 将数字字符串转成整数 走台阶问题 计算回文字符串 字符串反转 字符串模式匹配 字符串前缀匹配 字典trie匹配 ...

    leetcode重复字符串-Dynamic-Programming-:那些记不住过去的人注定要重蹈覆辙——动态规划

    leetcode 重复字符串动态规划- 那些记不住过去的人注定要重蹈覆辙——动态规划 Cointains Dp 问题 家长问题:。 子问题: 达到给定的分数。...删除使两个字符串相等。 子序列的最大点积(Leetcode)。

    什么是动态规划,及其解决的问题.md

    3. **编辑距离问题**:计算两个字符串之间的最小编辑距离(将一个字符串转换为另一个字符串所需的最少操作次数)。 4. **0-1背包问题**:给定一组物品,每种物品都有自己的重量和价值,每种物品只有一个。在限定的总...

    LeetCode解题总结

    13.5 字符串的编辑距离 13.6 不同路径之和 13.6.1 无障碍13.6.2 有障碍 13.7 最大矩形面积 13.8 字符串交叉组合 13.9 旋转字符串 13.10 最小路径和 13.11 所有的编码方式 13.12 独一无二的子序列数 13.13 拆分单词 ...

    dtl:C ++编写的差异模板库

    # include " dtl/dtl.hpp "比较两个字符串首先,计算两个字符串之间的差。 typedef char elem;typedef std::string sequence;sequence A ( " abc " );sequence B ( " abd " );dtl::Diff&lt; elem&gt; d (A, B);d.compose...

    programming-problems:数据结构和算法复习

    一编辑距离 合并排序数组 是子序列 退格字符串比较 重复的字符串匹配 装满水的容器 反向弦元音 有效回文 最短字距I 最短字距II 最短字距III 两个数组的交集I 两个数组的交集II 二和II 两个总和III 三和 四和...

    algorithm:从头开始的算法实现

    :字符串上的距离(也称为编辑距离) :Knuth-Morris-Pratt和Boyer-Moore算法的比较 :一种克林德林登迈尔系统 图形 :找到图表上任意两点之间的最短路径 ML :具有朴素贝叶斯的文本分类 :在线(批量)...

    Leetcode-Unlocked

    Leetcode锁定 由生成。 解决方案是从互联网上... [最多具有两个不同字符的最长子字符串](LeetCode锁定/c1.7.md) [遗漏范围](LeetCode锁定/c1.8.md) [一个编辑距离](LeetCode锁定/c1.9.md) [平面2D向量](Leet

    程序员刷多少道题可以面试-algorithms:算法

    比较表示为链表的两个字符串 将链表表示的两个数字相加 在交替位置将一个链表合并到另一个链表中 以给定大小的组反转列表 2个链表的并集和交集 检测并删除链表中的循环 链表的归并排序 从单向链表中选择一个随机节点...

    leetcode被墙-Leetcode-Unlocked:所有Leetcode缺失问题的问题和解决方案

    leetcode被墙Leetcode 已锁定 由 生成。 解决方法是从网上收集的。...[一个编辑距离](LeetCode Locked/c1.9.md) [Flatten 2D Vector](LeetCode Locked/c1.10.md) [Group Shifted Strings](LeetCode Loc

    高效算法:竞赛、应试与提高必修128例.[法] Christoph Dürr Jill-Jênn Vie(带书签文字版).pdf

    3 2 编辑距离(列文斯登距离45 3 3 最长公共子序列 47 3 4 升序最长子序列 49 3 5 两位玩家游戏中的必胜策略 52 第 4 章 数组 53 4 1 合并已排序列表 53 4 2 区间的总和 54 4 3 区间内的重复内容 54 4 4 区间的最大...

    疯狂Android讲义源码

     6.2.2 定义字符串、颜色、尺寸资源  文件 218  6.2.3 使用字符串、颜色、  尺寸资源 219  6.3 数组(Array)资源 222  6.4 使用(Drawable)资源 225  6.4.1 图片资源 225  6.4.2 StateListDrawable资源 ...

    疯狂Android讲义.part2

    18.6.10 找出最短距离 636 18.7 本章小结 638 第19章 电子拍卖系统 639 19.1 系统功能简介和架构设计 640 19.1.1 系统功能简介 640 19.1.2 系统架构设计 641 19.2 JSON简介 643 19.2.1 使用JSON语法创建对象 643 ...

    疯狂Android讲义.part1

    18.6.10 找出最短距离 636 18.7 本章小结 638 第19章 电子拍卖系统 639 19.1 系统功能简介和架构设计 640 19.1.1 系统功能简介 640 19.1.2 系统架构设计 641 19.2 JSON简介 643 19.2.1 使用JSON语法创建对象 643 ...

Global site tag (gtag.js) - Google Analytics