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.pswp.cn/news/272443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272443.shtml
英文地址,請注明出處:http://en.pswp.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;數據是一層層封…

嵌入式設備帶操作系統的啟動過程

樹莓派等芯片帶操作系統的啟動過程 C51&#xff0c;STM32(裸機)--------》c直接操控底層寄存器&#xff0c;實現相關業務。 x86 &#xff0c; Intel等架構跑的是windows操作系統。 啟動過程&#xff1a;電源 -》BIOS-》windows內核-》C盤&#xff0c;D盤-》程序啟動&#xff…

C#筆記

#region Using directives ... #endregion :表示中間的語句可以折疊 Console.WriteLine(); 類似于C語言中的輸入語句 &#xff0c;不過此處還須加入Console.ReadKey(); Console.WriteLine("{0} {1}.",myString,myInteger); 字符串中的每對花括號表示一個占位符&#…

微軟宣布下一代集成開發環境 — 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是一個開…

POJ 2676/2918 數獨(dfs)

思路&#xff1a;記錄每行每列每一個宮已經出現的數字就可以。數據比較弱 另外POJ 3074 3076 必須用剪枝策略。但實現較麻煩&#xff0c;還是以后學了DLX再來做吧 //Accepted 160K 0MS #include<cstdio> #include<iostream> #include<algorithm> #include&l…

負載均衡很難?看完這篇全懂了

來自&#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 的功能。所以…

(原)直方圖的相似性度量

轉載請注明出處&#xff1a; http://www.cnblogs.com/darkknightzh/p/5147982.html 對于兩直方圖 $S\left\{ {{s}_{1}},\cdots {{s}_{n}} \right\}$ 及 $M\left\{ {{m}_{1}},\cdots {{m}_{n}} \right\}$&#xff0c;n為直方圖維數&#xff08;如255&#xff09;&#xff0c;這兩…

【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;例如…