LeetCode-97-Interleaving String

算法描述:

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

Example 1:

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

Example 2:

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

解题思路:动态规划题。s3中的字符要么与s1中的字符相同,要么与s2中的字符相同。

递推式:

dp[i][j] = (dp[i-1][j] && (s3[i+j-1]==s1[i-1]) || dp[i][j-1] && (s3[i+j-1]==s2[j-1]))

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

猜你喜欢

转载自www.cnblogs.com/nobodywang/p/10385007.html