题解 | #编辑距离(一)#

编辑距离(一)

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

想复杂了,也想简单了。想复杂在于一开始没想到有这样一个动态规则,就想着字符串匹配那一套了;想简单在于只想着第一个字符串合起来去匹配,没想到“abba”“abxba”这类情况。

#include <vector>
class Solution {
  public:
    int editDistance(string str1, string str2) {
        int len1 = str1.length(), len2 = str2.length();
        vector<vector<int>>dp(len1 + 1, vector<int>(len2 + 1, 0));
        for (int i = 1; i <= len1; i++) dp[i][0] = i;
        for (int i = 1; i <= len2; i++) dp[0][i] = i;
        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {
                dp[i][j] = str1[i - 1] == str2[j - 1] ? dp[i - 1][j - 1] : (min(dp[i - 1][j],
                           min(dp[i][j - 1], dp[i - 1][j - 1])) + 1);
            }
        }
        return dp[len1][len2];
    }
    //以下记录自己错误的思路
    // void preprocess(string& s1, string& s2) {
    //     int len1 = s1.length(), len2 = s2.length();
    //     if (len1 == len2) return;
    //     unordered_map<int, unordered_set<int>> hash;
    //     for (int i = 0; i < len1; i++) {
    //         if (hash.find(s1[i]) != hash.end()) hash[s1[i]].insert(i);
    //         else hash[s1[i]] = unordered_set<int> {i};
    //     }
    //     int id = 0, maxnum = 0;
    //     for (int i = 0; i < len2 - len1 + 1; i++) {
    //         int tmp = 0;
    //         for (int j = i; j < len2; j++) {
    //             if (hash.find(s2[j]) != hash.end() &&
    //                     hash[s2[j]].find(j - i) != hash[s2[j]].end()) {
    //                 tmp++;
    //             }
    //         }
    //         if (tmp > maxnum) {
    //             maxnum = tmp;
    //             id = i;
    //         }
    //     }
    //     string head(id, '#'), tail(len2 - len1 - id, '#');
    //     s1 = head + s1 + tail;
    // }
    // int editDistance(string str1, string str2) {
    //     if (str1.length() > str2.length()) return editDistance(str2, str1);
    //     preprocess(str1, str2);
    //     printf("%s", str1.c_str());
    //     int res = 0;
    //     for (int i = 0; i < str1.length(); i++) {
    //         if (str1[i] == '#' || str1[i] != str2[i]) {
    //             res++;
    //         }
    //     }
    //     return res;
    // }
};

全部评论

相关推荐

||&nbsp;先说下主播个人情况:211本,暑期实习之前有过一段中大厂的后端实习,暑期拿过腾讯的实习offer,综合考虑业务和语言最终去了美团。实习期间体感还是不错的,5月初去的,去了就一直急着要需求做,担心因为没有产出导致转正失败,在第二个星期就和mt透露我希望能够留用。虽然第一个由于美团新人landing的友好性基本没做什么需求,但是后面也写出了小2w行的代码量(不包含单测)。中期经常主动加班赶需求,经常持续一两个星期加班到10点甚至更后面。mt对我确实不错,也是言传身教,实习期间给我讲了很多关于单测,ddd,set化等的理解,也是受益匪浅,此外在做需求的时候,也能看出把比较有含金量的部分交给我做...
菜菜菜小白菜菜菜:我在字节实习了四个月,有转正的压力所以周末大部分也在公司自学,也是因为一些原因转正拖的很久,这个点还没答辩,过段时间才回去答辩。整个不确定性的焦虑贯穿了我的秋招三个月,我也曾经犹豫过是不是应该放弃转正走秋招更快,最后因为沉没成本一直舍不得放弃,前前后后七个月真的挺累的,尤其是没有来字节实习的同学已经校招拿到意向时更加焦虑。这段时间也跟mentor聊了很多次,他告诉我未来工作上或者生活上,比这些更头疼的事情会更多,关键还是要调整好自己的心态。转正没有通过从过程上来看其实跟你自身没太大的关系,拖了三个月不出结果显然是ld的问题,并且今年美团最近的开奖大家似乎都不是很乐观,所以不去也罢。我在字节实习的时候,6月份有一个赶上春招末期的25届同事刚面进来,也拿到了小sp的薪水。不要对这件事有太大的压力,时代的问题罢了
点赞 评论 收藏
分享
karis_aqa:和hr没关系,都是打工的
点赞 评论 收藏
分享
10-09 16:12
门头沟学院 Java
帅宇殿下:佬,简历写的什么
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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