zoukankan      html  css  js  c++  java
  • 【leetcode】Interleaving String

    Interleaving String

    Given s1s2s3, 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.

     
     
    采用动态规划,假设dp[i][j]表示了s1的前i个元素(包括第i个元素)s1[1],s1[2].....s1[i-1],与s2的前j个元素(包括第j个元素)s2[1],s2[2]...s2[j-1]是否可以构成s3
     
    有两种情况可以考虑,
    如果dp[i-1][j]成立了,且s1[i-1]==s3[i+j-1],那么可以认为dp[i][j]成立
    如果dp[i][j-1]成立了,且s2[j-1]==s3[i+j-1],也可以认为dp[i][j]成立
     
     
    所以可以得到如下的递推式:
     dp[i][j]=(dp[i-1][j]&&s1[i-1]==s3[i+j-1])||(dp[i][j-1]&&s2[j-1]==s3[i+j-1]);
     
     
     1 class Solution {
     2 public:
     3     bool isInterleave(string s1, string s2, string s3) {
     4         
     5         int n1=s1.length();
     6         int n2=s2.length();
     7         int n3=s3.length();
     8         
     9         if(n1+n2!=n3)
    10         {
    11             return false;
    12         }
    13         
    14         vector<vector<bool> > dp(n1+1,vector<bool>(n2+1,false));
    15         
    16         dp[0][0]=true;
    17         
    18         for(int i=1;i<=n1;i++)
    19         {
    20             dp[i][0]=dp[i-1][0]&&s1[i-1]==s3[i-1];
    21         }
    22         
    23         for(int j=1;j<=n2;j++)
    24         {
    25             dp[0][j]=dp[0][j-1]&&s2[j-1]==s3[j-1];
    26         }
    27         
    28         for(int i=1;i<=n1;i++)
    29         {
    30             for(int j=1;j<=n2;j++)
    31             {
    32                 dp[i][j]=(dp[i-1][j]&&s1[i-1]==s3[i+j-1])||(dp[i][j-1]&&s2[j-1]==s3[i+j-1]);
    33             }
    34         }
    35         
    36         return dp[n1][n2];
    37     }
    38 };
  • 相关阅读:
    结对项目之感
    调查问卷之体会
    我的软件工程课程目标
    关于软件工程的课程建议
    结对编程--fault,error,failure
    结对编程总结
    结对编码感想
    我的软件工程课目标
    《软件工程》课之-调查问卷的心得体会
    软件工程课程讨论记录
  • 原文地址:https://www.cnblogs.com/reachteam/p/4185784.html
Copyright © 2011-2022 走看看