做过几遍了,第一次是在林大acm的时候,第一次接触动态规划的时候就是这题吧
这题用数组还真不行,测试用例长度超过500了
// LeetCode_EditDistance.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int minOfThree (int &va,int &vb,int &vc)
{
if (va<vb)
{
if (va<vc)
return va;
else
return vc;
}
else
{
if (vb<vc)
return vb;
else
return vc;
}
}
int minDistance(string word1, string word2) {
//int dp[500][500];
int len1 = word1.length();
int len2 = word2.length();
if (len1==0)
return len2;
if (len2==0)
return len1;
//memset(dp,0,500*500*sizeof(int));
vector<vector<int> >dp;
vector<int> temp;
for (int i=0;i<=len1;i++)
{
temp.clear();
for (int j=0;j<=len2;j++)
{
temp.push_back(0);
}
dp.push_back(temp);
}
for (int i=0;i<=len1;i++)
dp[i][0]=i;
for (int j=0;j<=len2;j++)
dp[0][j]=j;
for (int i=1;i<=len1;i++)
{
for (int j=1;j<=len2;j++)
{
if (word1[i-1]==word2[j-1])
dp[i][j] = dp[i-1][j-1];
else
dp[i][j] = minOfThree(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;
}
}
return dp[len1][len2];
}
int _tmain(int argc, _TCHAR* argv[])
{
string str1,str2;
while(cin>>str1&&cin>>str2)
cout<<minDistance(str1,str2)<<endl;
return 0;
}