编辑距离
来源:互联网 发布:获取intent数据 编辑:程序博客网 时间:2024/06/01 08:45
问题:
给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。
你总共三种操作方法:
插入一个字符
删除一个字符
替换一个字符
解题思路:
典型的动态规划问题,用 dp[i][j] 表示 word1 和 word2 中以 i,j 结尾的子串的编辑距离, 如果 word1[i] == word2[j],dp[i][j] = dp[i - 1][j - 1], 否则
dp[i][j] = 1 + min(dp[i][j - 1],min(dp[i - 1][j],dp[i - 1][j - 1]))
int minDistance(string word1, string word2) { // write your code here int row = word1.length(); int col = word2.length(); if(row == 0 && col == 0){ return 0; } if(row == 0){ return col; } if(col == 0){ return row; } int ** cache = new int*[row]; for(int i = 0; i < row; i++){ cache[i] = new int[col]; } for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ cache[i][j] = 0; } } cache[0][0] = word1[0] == word2[0] ? 0 : 1; for(int i = 1; i < row; i++){ cache[i][0] = word1[i] == word2[0] ? i : 1 + cache[i - 1][0]; } for(int i = 1; i < col; i++){ cache[0][i] = word1[0] == word2[i] ? i : 1 + cache[0][i - 1]; } for(int i = 1; i < row; i++){ for(int j = 1; j < col; j++){ if(word1[i] == word2[j]){ cache[i][j] = cache[i - 1][j - 1]; }else { cache[i][j] = 1 + min(cache[i - 1][j], min(cache[i][j - 1], cache[i - 1][j - 1])); } } } return cache[row - 1][col - 1]; }
0 0
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- Spring配置bean的方法(工厂方法和Factorybean)
- 学生成绩排名(C语言编写)
- 【C++】双向链表的实现
- myeclipse中项目的替换jar包的时候出现的错误
- 深入理解Activity(小补充)
- 编辑距离
- 找一个字符串中重复的最长子序列
- Direct-X学习笔记--骨骼动画进阶
- PAT Advanced 1041
- 排序算法之Java实现1——冒泡排序算法
- NSNotification大白话
- mysql常用命令
- 初学软件工程——(一、二章)
- hdu1069