lintcode:最小编辑距离

最小编辑距离 

给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。

你总共三种操作方法:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

样例

给出 work1="mart" 和 work2="karma"

返回 3

解题

动态规划解题

定义矩阵dp[][]

dp[i][j] 表示word1前i个字符 [0,1,2,...,i-1] 和 word2前j个字符 [0,1,2,...,j-1]的编辑距离

 

ch1 = word1.charAt(i)

ch2 = word2.charAt(j)

当 ch1== ch2:word1[0--(i-1)] 与word2[0--(j-1)] 的编辑距离dp[i][j] = dp[i-1][j-1] 不需要修改

当ch1!=ch2: 有三种修改方式

  •       ch1替换word2中的ch2,此时的编辑距离受上一位的编辑距离影响, 编辑距离是:dp[i-1][j-1] + 1
  •                   ch2插入到word1中ch1的前面,word1中的ch2还没有比较,编辑距离是:dp[i-1][j] + 1
  •                   删除ch2 编辑距离:dp[i][j-1] + 1

选取上面的最小值更新dp[i][j]的值

Java程序定义的dp矩阵长度是len1 + 1 * len2 + 1 的和上面有一点区别 

import java.util.Scanner;
// write your code here
public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);Main m = new Main();while(in.hasNext()){String[] str = in.nextLine().split(" ");String word1 = str[0];String word2 = str[1];int min = m.minDistance(word1,word2);System.out.println(min);}}public  int minDistance(String word1,String word2){int len1 = word1.length();int len2 = word2.length();int[][] dp = new int[len1+1][len2+1];for(int i =0;i<=len1;i++){dp[i][0] = i;}for(int j =0;j<= len2;j++){dp[0][j] = j;}for(int i =0;i< len1;i++){char ch1 = word1.charAt(i);for(int j =0;j< len2;j++){char ch2 = word2.charAt(j);if(ch1 == ch2){dp[i+1][j+1] = dp[i][j];}else{int replace = dp[i][j] +1;// ch1 代替 ch2int insert = dp[i][j+1] + 1;// ch2 插入到 ch1 前面的位置int delete = dp[i+1][j] + 1;// 删除ch2int min =replace>insert?insert:replace;min = min>delete?delete:min;dp[i+1][j+1] = min;}}}return dp[len1][len2];}
}

 注:搜狐2016实习笔试题目

转载于:https://www.cnblogs.com/theskulls/p/5312505.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这些代码优化的方法,你都用过吗?

来自&#xff1a;www.cnblogs.com/xrq730/代码优化的最重要的作用应该是&#xff1a;避免未知的错误在代码上线运行的过程中&#xff0c;往往会出现很多我们意想不到的错误&#xff0c;因为线上环境和开发环境是非常不同的&#xff0c;错误定位到最后往往是一个非常小的原因。然…

VMwareTool 安装

VMwareTools的一些实用性 安装后用户可以从物理主机直接往虚拟机里面拖文件。 安装后鼠标进入虚拟机后可以直接出来&#xff0c;不安装的话要按CTRLALT才可以释放鼠标。 安装后可以解决Ubuntu主窗口分辨率不适应问题&#xff0c;用户可以随意改变虚拟机窗口大小&#xff0c;vm…

Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio

转载于:https://www.cnblogs.com/hanhuilee/p/5221255.html

Ubuntu18.04的vim和ifconfig的安装

安装vim &#xff1a; 命令行中输入&#xff1a;sudo apt-get install vim (ps:它会显示让你输入密码&#xff0c;不过你输入的密码不会回显) 查看安装是否成功输入&#xff1a; vim -v 若出现以下情况&#xff1a; The following packages have unmet dependencies: vim : …

Http与WWW服务精解

TCP/IP 协议介绍在介绍 HTTP 协议之前&#xff0c;先简单说一下TCP/IP协议的相关内容。TCP/IP协议是分层的&#xff0c;从底层至应用层分别为&#xff1a;物理层、链路层、网络层、传输层和应用层&#xff0c;如下图所示&#xff1a;从应用层至物理层&#xff0c;数据是一层层封…

微软宣布下一代集成开发环境 — Visual Studio 2019

来自&#xff1a;开源中国链接&#xff1a;https://www.oschina.net/news/96817/microsoft-announces-visual-studio-2019在今天的一篇名为 Whats Next for Visual Studio 的博客文章中&#xff0c;微软宣布了它下一个版本的集成开发环境 —— Visual Studio 2019。不过&#x…

史上最通俗的集线器、交换机、路由器功能原理入门

1、前言本文旨在简单地说明集线器、交换机与路由器的区别&#xff0c;因而忽略了很多细节&#xff0c;三者实际的发展过程和工作原理并非文中所写的这么简单。如果你看完本文能大概了解到三者的异同&#xff0c;本文的目的就达到了。2、帝国时代我相信我们都玩过一款特别火的游…

泛型(Generic)

为什么要有泛型&#xff1f; 1.解决元素存储的安全性问题 2.解决获取数据元素时&#xff0c;需要类型强转的问题 服用前&#xff1a; 服用后&#xff1a; 泛型&#xff0c;JDK1.5新加入的&#xff0c;解决数据类型的安全性问题&#xff0c;其主要原理是在类声明时通过一个标识表…

官宣!DevExpress Blazor UI组件,支持全新的.NET 8渲染模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 .NET 8为Blazor引入了令人兴奋的重…

linux内核源码树

linux内核源码树扫盲分析 sudo apt-get install tree //下载tree tree //输入指令(该指令可以检查第三方工具包里的内容是否完整)可以看到如图的树状结构&#xff1a; linux内核源码&#xff1a; 为什么内核大约1.3w个c文件&#xff0c;1100w行代码&#xff1f; linux是一个开…

负载均衡很难?看完这篇全懂了

来自&#xff1a;金钟路上小码工链接&#xff1a;https://www.cnblogs.com/danbing/p/7459224.html一、什么是负载均衡&#xff1f;互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#…

配置树莓派linux的内核和编译并将镜像拷贝至树莓派

驱动代码的编写需要一个提前编译好的内核&#xff0c;编译内核就必须配置&#xff0c;配置的最终目标会生成.config文件&#xff0c;该文件指导makefile去把有用的东西组织成内核。 如何生成.config文件&#xff1a; 第一种方式&#xff1a; 厂家配linux内核源码&#xff0c;比…

h5 与原生 app 交互的原理

作者&#xff1a;senntyousegmentfault.com/a/1190000016759517现在移动端 web 应用&#xff0c;很多时候都需要与原生 app 进行交互、沟通&#xff08;运行在 webview中&#xff09;&#xff0c;比如微信的 jssdk&#xff0c;通过 window.wx 对象调用一些原生 app 的功能。所以…

【ROS问题】rqt_plot运行报错

本人Linux版本&#xff1a;Ubuntu 18.04 LTS ROS版本&#xff1a;Melodic 方案一&#xff1a; 你看那个报错&#xff0c;全是Matplotlib的报错&#xff0c;是这个东西版本不够高&#xff0c;重新安装就好啦。 python -m pip install -U pip python -m pip install -U matp…

BCP使用笔记整理

一、BCP 简介大容量复制程序实用工具 (bcp) 可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。 使用 bcp 实用工具可以将大量新行导入 SQL Server 表&#xff0c;或将表数据导出到数据文件。 除非与 queryout 选项一起使用&#xff0c;否则使用该实…

怎样基于谷歌地图的Server缓存公布Image Service服务

怎样基于谷歌地图的Server缓存公布Image Service服务第一步&#xff1a;下载地图数据下载安装水经注万能地图下载器&#xff0c;启动时仅仅选择电子.谷歌&#xff08;这里能够依据自己的须要选择&#xff09;。例如以下图所看到的。找到成都后框选下载成都区域&#xff0c;例如…

整理的一些比较基础的面试知识点

1、面向对象的三大特性或其具体体现在哪 2、页面间传值方式 3、session cookie原理及区别 4、hasstable&#xff0c;dictionary&#xff0c;List &#xff0c;collection 5、类和抽象类&#xff0c;类和接口&#xff0c;接口和抽象类区别及适合场景 6、Get和Post比较优缺点或区…

五种类型的程序员,你属于哪一种?

在我的编程生涯中,我碰到过很多奇奇怪怪的对手和同盟。我把这些编码战士们分成五类&#xff0c;有些人是你队伍中的好伙伴&#xff0c;有些人则是捣蛋者&#xff0c;让你的每一个计划都完不成。不管怎么说&#xff0c;他们在软件开发的诸神殿上都占有一席之地。如果你的团队中没…

一些有用的js插件

getfuelux.com 一系列插件合集 Ion.RangeSlider 超级牛的范围选择控件 Ion.CheckRadio Ion.Tabs Ion.Calendar Ion.ImageSlider Ion.Zoom www.ngwidgets.com Advanced UI Widgets for AngularJS http://www.jq22.com/ jQuery 插件库 http://jvectormap.com/ 地图插件 X-…

C# FTP操作类库

class FTP_Class{string ftpServerIP;string ftpUserID;string ftpPassword;FtpWebRequest reqFTP; #region 连接/// <summary>/// 连接FtpWebRequest/// </summary>/// <param name"path"></param>private void Connect(String path)/…