【LeetCodeコンテスト141】

最初の週のトーナメント、それの10時45考えるとLeetcode。
ゲームリンク:https://leetcode.com/contest/weekly-contest-141/

前の二つは、論理的な質問は比較的簡単ですですが、C ++の構文で、遅すぎる質問を読んで、常に間違っている、に精通していません。
直接ステップの数を記録する第三のチャネル1091のBFSは、現在の近隣の位置は、アクセスまたは更新されたステップの数を、キューに入れられていません。いいえ任意のスキルをBFSません。読むか、長い時間遅延問題を、理解していません。

4番目の方法は、ハード難しい質問です。書面による説明をご覧ください。

トピックリンク:1092最短共通Supersequence

二つの文字列STR1、STR2、文字列sを求めて、STR1とstr2秒の配列であり、sが最小の長さが必要です。

アイデア:

まず、LCSを見つけ、その後、2つの文字列を横断し、LCSにおける現在の文字の場合、ANSに参加し、そうでない場合はLCS文字ではないことを付け加えました。LCSに挿入された、すなわち残りの文字。

コード:

class Solution {
public:
    string shortestCommonSupersequence(string str1, string str2) {
        int l1 = str1.length();
        int l2 = str2.length();
        vector<vector<int> > dp(l1+1, vector<int>(l2+1, 0));
        dp[0][0] = (str1[0] == str2[0] ? 1 : 0);
     
        for (int i=1; i<=l1; ++i) {
            for (int j=1; j<=l2; ++j) {
                if (str1[i-1] == str2[j-1]) dp[i][j] = dp[i-1][j-1] + 1;
                else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
            }
        }
        
        string ans = "";
        while(l1 || l2) {
            char temp;
            if (l1 <= 0) temp = str2[--l2];
            else if (l2 <= 0) temp = str1[--l1];
            else if (str1[l1-1] == str2[l2-1]) temp = str1[--l1] = str2[--l2];
            else temp = (dp[l1][l2] == dp[l1-1][l2] ? str1[--l1] : str2[--l2]);
            ans += temp;
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

この質問はまだ慌て感じています。
これで週と週シーズンは継続します。

昨夜とドラマを見るために遅くまで起きています。悲劇。
あなたは本当に自分のセルフコントロールをテストすることはできません。アウェイ誘惑から。
今週は一日何をするか分からない...速くrcnnソースにそれを見続けますか。

おすすめ

転載: blog.csdn.net/iCode_girl/article/details/92586006
おすすめ