1. 程式人生 > 實用技巧 >p159 編輯距離 (leetcode72)

p159 編輯距離 (leetcode72)

一:解題思路

這是一道動態規劃的難題,即一個規模較大的問題可以分解為一個個規模較小的問題,並且規模較小的問題和規模較大的問題解法是一樣的。

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; } } return
d[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];
        }
    }