Edit Distance

来源:互联网 发布:数据库查询分析器 编辑:程序博客网 时间:2024/04/18 12:18

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

class Solution {public:    int minDistance(string word1, string word2) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int w1_size = word1.size();        int w2_size = word2.size();        int max_size = std::max(w1_size, w2_size) + 1;        vector<vector<int> > record;        for (int i = 0; i <= w1_size; ++i) {            record.push_back(vector<int>(w2_size+1, max_size));            record[i][0] = i;        }        for (int i = 0; i <= w2_size; ++i) {            record[0][i] = i;        }        for (int i = 1; i <= w1_size; ++i) {            for (int j = 1; j <= w2_size; ++j) {                if (word1[i-1] == word2[j-1]) {  //注意下标,从第一个字符word1[0] 与 word2[0]                    record[i][j] = record[i-1][j-1];                } else {                    if (record[i-1][j] + 1 < record[i][j]) {                       record[i][j] = record[i-1][j] + 1;                    }                     if (record[i][j-1] + 1 < record[i][j]) {                        record[i][j] = record[i][j-1] + 1;                    }                    if (record[i-1][j-1] + 1 < record[i][j]) {                        record[i][j] = record[i-1][j-1] + 1;                    }                }            }        }        return record[w1_size][w2_size];    }};


原创粉丝点击