标签:style http color io os ar for div sp
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
题意:有两个单词,可以选择以下三种操作:增、删、替换一个字符,问需要经过多少次操作才能把第一个单词变为第二个
思路:dp
f[i][j] 表示word1[1..j]到word2[1..i]的最小编辑距离
if word2[i] == word1[j], f[i][j] = f[i - 1][j - 1]
else f[i][j] = min{f[i - 1][j - 1], f[i][j - 1], f[i - 1][j]} + 1
复杂度:时间O(n),空间O(1)
int minDistance(string word1, string word2) { if(word1.empty()) return word2.size(); if(word2.empty()) return word1.size(); vector<vector<int> > dp(word1.size() + 1, vector<int>(word2.size() + 1, 0)); // //初始化 for(int i = 0; i <= word1.size(); ++i) dp[i][0] = i; for(int j = 0; j <= word2.size(); ++j) dp[0][j] = j; //迭代 for(int i = 0; i < word1.size(); ++i){ for(int j = 0; j < word2.size(); ++j){ int ii = i + 1, jj = j + 1; if(word1[i] == word2[j]) dp[ii][jj] = dp[ii - 1][jj - 1]; else dp[ii][jj] = min(min(dp[ii][jj - 1], dp[ii - 1][jj]), dp[ii - 1][jj - 1]) + 1; } } return dp[word1.size()][word2.size()]; }
标签:style http color io os ar for div sp
原文地址:http://blog.csdn.net/zhengsenlie/article/details/39320487