Leetcode解題報告——97. Interleaving String

題目要求:
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.

For example,
Given:
s1 = "aabcc",
s2 = "dbbca",

When s3 = "aadbbcbcac", return true.
When s3 = "aadbbbaccc", return false

簡單解釋下,判斷s3是否由s1s2交替組成,即s3前n位字符由s1的前 n-i 位字符和 s2的前 i 位字符組成。

這是個典型的動態規劃問題。我們保留一個二維數組 dp,
dp[i][j] 表示 s3 的前 i+j 位 字符 是否由 s1 的前 i 位 和 s2的前 j 位組成。
在已知dp[i-1][j]dp[i][j-1]的情況下,欲求dp[i][j],只需思考s3的第 i+j 位字符 來自 s1 的第 i 個字符 還是 s2的第 j 個字符,以及是否相等。
所以其遞推公式為:dp[i][j] = (s1[i-1] == s3[i+j-1] && dp[i-1][j]) || (s2[j-1] == s3[i+j-1] && dp[i][j-1]

  • 全部代碼
   public  boolean isInterleave(String s1, String s2, String s3) {
        if (s3.length() != s1.length() + s2.length()) return false;

        boolean[][]dp = new boolean[s1.length()+1][s2.length()+1];
        //初始化邊界
        dp[0][0] = true;  
        for (int i = 1; i <=s1.length() ; i++) {
            dp[i][0] = s3.charAt(i-1) == s1.charAt(i-1) ? dp[i-1][0]:false;
        }

        for (int i = 1; i <=s2.length() ; i++) {
            dp[0][i] = s3.charAt(i-1) == s2.charAt(i-1) ? dp[0][i-1]:false;
        }

        for (int i = 1; i <=s1.length() ; i++) {
            for (int j = 1; j <=s2.length() ; j++) {
                char v3 = s3.charAt(i+j-1);
                boolean v1 = v3 == s1.charAt(i-1) ? dp[i-1][j]:false;
                boolean v2 = v3 == s2.charAt(j-1) ? dp[i][j-1]:false;
                dp[i][j] = v1 || v2;
            }
        }
        return dp[s1.length()][s2.length()];

    }
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,766評論 0 33
  • 動態規劃(Dynamic Programming) 本文包括: 動態規劃定義 狀態轉移方程 動態規劃算法步驟 最長...
    廖少少閱讀 3,322評論 0 18
  • 這道題目搞了很久。當然是沒做出來。然后有挺多衍生問題。一步步,最后才到這個難度。 Step1,給你 string ...
    Richardo92閱讀 444評論 0 0
  • 分治方法 將問題劃分成互不相交的子問題 遞歸地求解子問題 將子問題的解組合起來 動態規劃(兩個要素:最優子結構、子...
    superlj666閱讀 513評論 0 0
  • 前言 正文6道題目來自leetcode––為求職為生的編程網站,目的是工作閑暇之時錘煉代碼功底。如何從這篇文章受益...
    落影loyinglin閱讀 1,019評論 2 12