*LeetCode-Edit Distance
2015-10-07 08:32
316 查看
常规做法是用一个mn matrix 然后update条件是假如这一位相等 那么就等于左上角 假如不等就是左,上, 左上三个的min加一
初始化要多处一行一列 初始化成和index相同
然后优化算法是只用一行的array加上一个数字来记录
public class Solution {
public int minDistance(String word1, String word2) {
int m = word1.length();
int n = word2.length();
int [][] res = new int [ m + 1 ][ n + 1 ];
for ( int i = 0; i < m + 1; i ++ ){
res [ i ][ 0 ] = i;
}
for ( int i = 0; i < n + 1; i ++ ){
res [ 0 ][ i ] = i;
}
for ( int i = 1; i < m + 1; i ++ ){
for ( int j = 1; j < n + 1; j ++ ){
if ( word1.charAt ( i - 1 ) == word2.charAt ( j - 1 ))
res [ i ][ j ] = res [ i - 1 ][ j - 1 ];
else{
res [ i ][ j ] = Math.min ( res[i-1][j], Math.min ( res[i][j-1], res[i-1][j-1] )) + 1;
}
}
}
return res [ m ][ n ];
}
}
初始化要多处一行一列 初始化成和index相同
然后优化算法是只用一行的array加上一个数字来记录
public class Solution {
public int minDistance(String word1, String word2) {
int m = word1.length();
int n = word2.length();
int [][] res = new int [ m + 1 ][ n + 1 ];
for ( int i = 0; i < m + 1; i ++ ){
res [ i ][ 0 ] = i;
}
for ( int i = 0; i < n + 1; i ++ ){
res [ 0 ][ i ] = i;
}
for ( int i = 1; i < m + 1; i ++ ){
for ( int j = 1; j < n + 1; j ++ ){
if ( word1.charAt ( i - 1 ) == word2.charAt ( j - 1 ))
res [ i ][ j ] = res [ i - 1 ][ j - 1 ];
else{
res [ i ][ j ] = Math.min ( res[i-1][j], Math.min ( res[i][j-1], res[i-1][j-1] )) + 1;
}
}
}
return res [ m ][ n ];
}
}
public class Solution { public int minDistance(String word1, String word2) { int m = word1.length(); int n = word2.length(); int [] res = new int [ n + 1 ]; for ( int i = 0; i < n + 1; i ++ ){ res [ i ] = i; } for ( int i = 1; i < m + 1; i ++ ){ int prev = i; int cur = prev; for ( int j = 1; j < n + 1; j ++ ){ if ( word1.charAt ( i - 1 ) == word2.charAt ( j - 1 )) cur = res [ j - 1 ]; else{ cur = Math.min ( res[j - 1], Math.min ( res[ j ], prev )) + 1; } res [ j - 1 ] = prev; prev = cur; } res [ n ] = cur; } return res [ n ]; } }
相关文章推荐
- Java笔记---网络编程
- IIS Excel操作问题解决 Retrieving the COM class factory for component with CLSID {00024500-0000-000
- [转]两位国母的不同人生
- diy文件系统上创建文件的流程
- 什么是公有云、私有云和混合云?
- [转]String.Replace 和 String.ReplaceAll 的区别
- SQL Tuning Advisor一个错误ORA-00600: internal error code, arguments: [kesqsMakeBindValue:obj]
- Qt 下载地址和从Qt4到Qt5
- UNIX硬链接,软链接(符号链接),文件复制
- 悉数美剧《黑客军团》中的黑客工具
- Java基础知识强化之集合框架笔记48:产生10个1~20之间的随机数(要求:随机数不能重复) 简洁版
- 如何开博客
- 概览J2EE
- easyUI draggable组件使用
- mac osx 启动wireshark闪退
- LeetCode Algorithms #258 <Add Digits>
- 【转】图文详解YUV420数据格式
- Leetcode NO.45 Jump Game II
- 用for循环打印菱形
- 【bzoj3714】【PA2014】【Kuglarz】【最小生成树】