题解 | 编辑距离(一)

编辑距离(一)

https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da

class Solution {
  public:
        int editDistance(string str1, string str2) {
        // 确保str1是较短的字符串,减少空间使用
        if (str1.length() > str2.length())
            swap(str1, str2);
            
        int m = str1.length();
        int n = str2.length();
        
        // 只使用一个一维数组,空间复杂度O(min(m,n))
        vector<int> dp(m + 1);
        for (int i = 0; i <= m; i++)
            dp[i] = i;
        
        // 填充DP表格
        for (int j = 1; j <= n; j++) {
            int prev = dp[0]; // 保存dp[i-1][j-1]的值
            dp[0] = j;        // 第一列的初始化
            
            for (int i = 1; i <= m; i++) {
                int temp = dp[i]; // 暂存当前dp[i]的值,用于下一个位置的计算
                
                if (str1[i-1] == str2[j-1])
                    dp[i] = prev;
                else
                    dp[i] = 1 + min({dp[i],    // 删除
                                    dp[i-1],   // 插入
                                    prev});    // 替换
                                    
                prev = temp; // 更新prev为当前位置的原值
            }
        }
        
        return dp[m];
    }
};

全部评论

相关推荐

03-03 19:02
已编辑
东华理工大学 Node.js
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务