美文网首页
97. Interleaving String

97. Interleaving String

作者: 黑山老水 | 来源:发表于2019-05-26 11:30 被阅读0次

    Description:

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.

    Example:

    Example 1:

    Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
    Output: true
    

    Example 2:

    Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
    Output: false
    

    Link:

    https://leetcode.com/problems/interleaving-string/

    解题方法:

    DP:
    We could use dp[i][j] represent if we are able to form the first i + j th substring of s3 (s3.substring(0, i + j)) by the interleaving of the first ith substring of s1 (s1.substring(0, i)) and the first jth substring of s2 (s2.substring(0, j)).
    Then for dp[i][j], the new character is s3[i + j - 1], if it is equal to s1[i - 1], which means, we can use s1[i - 1] to match this new character. Then only if dp[i - 1][j] == true (which means s3.substring(0, i + j - 1) could be formed by s1.substring(0, i - 1) and s2.substring(0, j)), dp[i][j] is true.
    So we have:

    if (s3[i + j - 1] == s1[i - 1] && dp[i - 1][j])
      dp[i][j] = true;
    

    In another hand, we can also have:

    if (s3[i + j - 1] == s2[j - 1] && dp[i][j - 1])
      dp[i][j] = true;
    

    Time Complexity:

    s1.size() * s2.size()

    完整代码:

    class Solution {
    public:
        bool isInterleave(string s1, string s2, string s3) {
            int size1 = s1.size(), size2 = s2.size(), size3 = s3.size();
            if(size1 + size2 != size3)
                return false;
            vector<vector<bool>> dp(size1 + 1, vector<bool>(size2 + 1, false));
            for(int i = 0; i <= size1; i++) {
                for(int j = 0; j <= size2; j++) {
                    if(i == 0 && j == 0)
                        dp[i][j] = true;
                    if(i > 0)
                        if(s1[i - 1] == s3[i + j - 1] && dp[i - 1][j])
                            dp[i][j] = true;
                    if(j > 0)
                        if(s2[j - 1] == s3[i + j - 1] && dp[i][j - 1])
                            dp[i][j] = true;
                }
            }
            return dp[size1][size2];
        }
    };
    

    相关文章

      网友评论

          本文标题:97. Interleaving String

          本文链接:https://www.haomeiwen.com/subject/ycextctx.html