题解 | #计算字符串的编辑距离#

计算字符串的编辑距离

https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314

#include <vector>
#include <iostream>
using namespace std;

int main() {
    /*
    dp[i][j] 表示s1[i] 与 s2[j]之间的编辑距离
    i = 0, j = 0时,编辑距离为另一字符串长度
    if s1[i] == s2[j]
        dp[i][j] = dp[i - 1][j - 1]
    else
        dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1 删除一个字符
        dp[i][j] = dp[i - 1][j - 1] + 1 插入一个字符
        dp[i][j] = dp[i - 1][j - 1] + 1 替换一个字符
    */
    string s1, s2;
    cin >> s1 >> s2;
    int row = s1.size();
    int col = s2.size();
    vector<vector<int>> dp(row + 1, vector<int>(col + 1, 0));
    for(int i = 1; i <= col; ++i){
        dp[0][i] = i;
    }
    for(int i = 1; i <= row; ++i){
        dp[i][0] = i;
    }
    for (int i = 1; i <= row; ++i) {
        for (int j = 1; j <= col; ++j) {
            if (s1[i - 1] == s2[j - 1]){
                dp[i][j] = dp[i - 1][j - 1];
            }else{
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;
                dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + 1);
            }
        }
    }
    cout << dp[row][col] << endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头像
04-09 14:29
Java
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务