Contents

ARST打卡第125周[125/521]

Algorithm

lc583_两个字符串的删除操作

思路

感觉是前缀匹配,可以用板子直接套,但是自己有点忘了,想想其他思路 就是板子,看题解回忆一下板子吧

题解发现是公共子序列,还有dp的做法,看来思路还是有偏差的… 链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings/solution/liang-ge-zi-fu-chuan-de-shan-chu-cao-zuo-14uw/

最神奇的是,dp法相当于最长公共子序列的反面法,挺奇妙的

code

最长公共子序列

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
    int minDistance(string word1, string word2) {
        int m = word1.size();
        int n = word2.size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));

        for (int i = 1; i <= m; i++) {
            char c1 = word1[i - 1];
            for (int j = 1; j <= n; j++) {
                char c2 = word2[j - 1];
                if (c1 == c2) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }

        int lcs = dp[m][n];
        return m - lcs + n - lcs;
    }
};

dp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
    int minDistance(string word1, string word2) {
        int m = word1.size();
        int n = word2.size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));

        for (int i = 1; i <= m; ++i) {
            dp[i][0] = i;
        }
        for (int j = 1; j <= n; ++j) {
            dp[0][j] = j;
        }
        for (int i = 1; i <= m; i++) {
            char c1 = word1[i - 1];
            for (int j = 1; j <= n; j++) {
                char c2 = word2[j - 1];
                if (c1 == c2) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;
                }
            }
        }

        return dp[m][n];
    }
};

Review

对象存储的api接口_ceph文档

Tips

对象存储的api接口_阿里云文档

Share-自己提交代码的几点教训

在工作中,如果要和别人协作提交代码,而且不方便改.gitignore的情况下,提交代码的时候要十分小心

下面是自己的两次惨痛教训

大工程不要直接git add -A

有时候有许多的修改内容的时候,可能一个个提交比较麻烦,所以git add -A很方便

但是这个操作容易在忘记git status检查的时候,把大量的编译文件,或者无关的文件提交到代码仓库 这样会对别人造成很大的不方便,严重的时候会导致一段时间内整个分支无法继续使用

编译出错的修复记得也要提交

有时候工作很多打断的时候,比如老是有人找你的时候,你可能cherry-pick了别人的代码,或者已经commit了代码之后, 编译了很长时间出错了,然后你在本地修改了代码,然后编程成功了,然后你git stash里面有许多的东西

导致你没有看清你的修改的文件,然后就漏了提交你修复后的修改

这样就会导致提交的代码无法编译通过

提交上去之后,晚上凌晨自动打包的服务器会编译出错,导致打包失败,这样就会导致一个人的错误阻塞了所有的开发测试的工作(因为白天手动打包又得几个小时)