题目
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
思路
具体参考:[经典面试题]字符串编辑距离
思路一 超时
代码
/*--------------------------------------------
* 日期:2014-03-01
* 作者:SJF0115
* 题目: 72.Edit Distance
* 网址:https://oj.leetcode.com/problems/edit-distance/
* 结果:AC
* 来源:LeetCode
* 博客:
------------------------------------------------*/
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.size();
int n = word2.size();
// Edit[i][j]为word1[0..i-1]和word2[0..j-1]的最小编辑数
int Edit[m+1][n+1];
// 初始化
for(int i = 0;i <= m;++i){
Edit[i][0] = i;
}//for
for(int i = 0;i <= n;++i){
Edit[0][i] = i;
}//for
for(int i = 1;i <= m;++i){
for(int j = 1;j <= n;++j){
// 当前字符相同
if(word1[i-1] == word2[j-1]){
Edit[i][j] = Edit[i-1][j-1];
}//if
else{
Edit[i][j] = 1 + min(Edit[i-1][j-1],min(Edit[i-1][j],Edit[i][j-1]));
}//else
}//for
}//for
return Edit[m][n];
}
};
int main(){
Solution solution;
string str1("ab");
string str2("bc");
cout<<solution.minDistance(str1,str2)<<endl;
return 0;
}
运行时间
时间: 2024-09-14 13:35:01