码迷,mamicode.com
首页 > 其他好文 > 详细

Edit Distance

时间:2015-03-18 01:08:08      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

该题目和求两个字符串的最长公共子串,有相似之处。关键是求得动态规划方程。即f(m,n)= MIN(f(m-1,n-1),f(m-1,n),f(m,n-1)) + 1;f(m,n)表示长度为m的字符串转换为长度为n的字符串所需的最少步骤。f(m,n)递推是通过和最后一个字符串的比较递推得到。存在一个定理,如果两个字符串的最后一个字符相同,则f(m,n) = f(m-1,n-1);

class Solution {
public:
      string   pattern ;
	  string   word;
    int minDistance(string word1, string word2) {
       vector<vector<int>> buf(word2.size()+1);
	   int step = 0 ,i = 0, j = 0;
	   pattern = word1;
	   word    = word2;
       if(word1.size() ==0)
	   	return word2.size();
	   if(word2.size() ==0)
	   	return word1.size();
	   
	   for(i=0; i<word2.size()+1; i++)
	   {
          buf[i].resize(word1.size()+1);
	   }
	   for(i=0; i<word2.size()+1; i++)
	   {
        	buf[i][0] = i;
	   }
	   for(i=0; i<word1.size()+1; i++)
	   {
        	buf[0][i] = i;
	   }
      for(i=1; i<=word2.size(); i++)
	  	for(j=1; j<= word1.size(); j++)
	  	{
        	step = GetMin(i,j,buf);
			buf[i][j] = step;
		}
		return buf[i-1][j-1];
    }
   int GetMin(int i,int j,vector<vector<int>>& buf)
   {
      int step = 0;
	  if(i == 0)
		return j;
	  if(j == 0)
		return i;
	  if(word[i-1] == pattern[j-1])
	  	return GetMin(i-1,j-1,buf);
	  step = min(buf[i-1][j],buf[i][j-1]);
	  step = min(step,buf[i-1][j-1]);
	  step +=1;

	  return step;
   }
};

 

Edit Distance

标签:

原文地址:http://www.cnblogs.com/xgcode/p/4345828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!