1. 程式人生 > >LeetCode-97-Interleaving String

LeetCode-97-Interleaving String

clas form false tput 相同 -i nbsp The put

算法描述:

Given s1, s2, s3, 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()]; }

LeetCode-97-Interleaving String