[second]Interleaving String

//DP

    bool isInterleave(string s1, string s2, string s3) {
        // Note: The Solution object is instantiated only once and is reused by each test case.  
        //DP
        if(s1.empty()&&s2.empty()&&s3.empty())
            return true;
        int m = s1.size();
        int n = s2.size();
        if(m+n!=s3.size())
            return false;
        vector<vector<bool>> dp(m+1,vector<bool>(n+1,false));
        int i,j;
        dp[0][0] = true;
        for(j=1;j<=n;j++)
        {
            if(dp[0][j-1]&&s2[j-1]==s3[j-1])
                dp[0][j] = true;
        }
        for(i=1;i<=m;i++)
        {
            if(dp[i-1][0]&&s1[i-1]==s3[i-1])
                dp[i][0] = true;
        }
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(s1[i-1]==s3[i+j-1]&&s2[j-1]!=s3[i+j-1])
                    dp[i][j] = dp[i-1][j];
                else if(s1[i-1]!=s3[i+j-1]&&s2[j-1]==s3[i+j-1])
                    dp[i][j] = dp[i][j-1];
                else if(s1[i-1]==s3[i+j-1]&&s2[j-1]==s3[i+j-1])
                    dp[i][j] = dp[i][j-1]||dp[i-1][j];
            }
        }
        return dp[m][n];
        
    }

  

posted @ 2013-10-05 12:22  summer_zhou  阅读(150)  评论(0编辑  收藏  举报