【DP】编辑距离
来源:互联网 发布:windows无法连接到cmcc 编辑:程序博客网 时间:2024/05/21 17:27
题目描述
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
哇终于在DP上找到点感觉!
dist[i][j]表示word1 1~i通过dist[i][j]种次操作变到word2 1~j。
当word1.charat(i) == word2.charat(j)时,dist[i][j] = dist[i - 1][j - 1];
否则,有三种选择:
1)如果dist[i - 1][j]最小,则dist[i][j] = dist[i - 1][j] + 1(word1末尾的一次删除操作);
2)如果dist[i - 1][j - 1]最小,则dist[i][j] = dist[i - 1][j - 1] + 1(word1末尾的字符替换成word2末尾的字符);
3)如果dist[i][j - 1]最小,则dist[i][j] = dist[i][j - 1] + 1(说明这次的word2的末尾字符插入到word1末尾即可);
public class Solution { public int minDistance(String word1, String word2) { if(word1.equals("") || word2.equals("")) return word1.equals("") ? word2.length():word1.length(); int len1 = word1.length() + 1; int len2 = word2.length() + 1; int [][] dist = new int [len1][len2]; dist[0][0] = 0; for(int i = 1; i < len1; ++i) dist[i][0] = i; for(int i = 1; i < len2; ++i) dist[0][i] = i; for(int i = 1; i < len1; ++i){ for(int k = 1; k < len2; ++k){ if(word1.charAt(i - 1) == word2.charAt(k - 1)){ dist[i][k] = dist[i - 1][k - 1]; }else{ int temp = dist[i - 1][k] > dist[i - 1][k - 1]? dist[i - 1][k - 1] : dist[i - 1][k]; int min = temp > dist[i][k - 1]? dist[i][k - 1] : temp; dist[i][k] = min + 1; } } } return dist[len1 - 1][len2 - 1]; }}
阅读全文
0 0
- 编辑距离 (dp)
- 【dp】编辑距离问题
- zjut1699-编辑距离dp
- 编辑距离问题 dp
- DP解编辑距离
- 编辑距离(DP)
- dp-编辑距离HLG
- dp 编辑距离问题
- 1183 编辑距离 dp
- dp - 编辑距离
- DP-编辑距离问题
- 编辑距离(dp)
- 编辑距离 dp
- 编辑距离 (dp)
- dp--编辑距离
- 【DP】编辑距离
- 编辑距离 dp
- dp专题:编辑距离
- [贪心+深搜]马的回路
- Directx9学习(六)第一个小游戏
- 安装RHadoop
- wireshark监控android socket 通信
- BitmapShader渲染器:实现圆形图片
- 【DP】编辑距离
- 学习笔记20-经典面试题-求一个整数中1的个数
- 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
- HDU 3709 Balanced Number (数位DP+思维)【模板】
- JavaScriptSerializer中日期序列化问题解决方案
- 正序输入字符串,反序输出
- 删除空白页
- PBO
- 一个分号引发的血案,中文登录正常,英文登录挂掉