首页 > 代码库 > 【leetcode】Interleaving String
【leetcode】Interleaving String
Interleaving String
Given s1, s2, s3, 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 };
【leetcode】Interleaving String
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。