p159 編輯距離 (leetcode72)
阿新 • • 發佈:2020-07-31
一:解題思路
這是一道動態規劃的難題,即一個規模較大的問題可以分解為一個個規模較小的問題,並且規模較小的問題和規模較大的問題解法是一樣的。
Time:O(m*n),Space:O(m*n)
二:完整程式碼示例 (C++版和Java版)
C++:
class Solution { private: int min3(int a, int b, int c) { return min(a,min(b,c)); } public: int minDistance(string word1, string word2) {if (word1.size() == 0 && word2.size() == 0) return 0; int m = word1.size() + 1; int n = word2.size() + 1; vector<vector<int>> d(m,vector<int>(n,0)); for (int j = 0; j < n; j++) d[0][j] = j; for (int i = 0; i < m; i++) d[i][0] = i; for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (word1[i - 1] == word2[j - 1]) d[i][j] = d[i-1][j-1]; else d[i][j] = min3(d[i-1][j-1],d[i-1][j],d[i][j-1]) + 1; } } returnd[m-1][n-1]; } };
Java:
class Solution { private int min(int a,int b,int c) { return Math.min(a,Math.min(b,c)); } public int minDistance(String word1, String word2) { if(word1==null || word2==null) return 0; int m=word1.length()+1; int n=word2.length()+1; int[][] d=new int[m][n]; for(int j=0;j<n;j++) d[0][j]=j; for(int i=0;i<m;i++) d[i][0]=i; for(int i=1;i<m;i++) { for(int j=1;j<n;j++) { if(word1.charAt(i-1)==word2.charAt(j-1)) d[i][j]=d[i-1][j-1]; else d[i][j]=min(d[i-1][j-1],d[i-1][j],d[i][j-1])+1; } } return d[m-1][n-1]; } }