您的位置:首页 > 其它

97. Interleaving String

2017-12-20 11:07 197 查看
1、题目描述

输入字符串s1,s2,s3,判断s3是否可以由s1与s2交织而成。

2、思路

dynamic programming。

dp[i][j]指的是s1的前i位和s2的前j位组成的字符串能否形成s3的前i+j位。

3、代码

bool isInterleave(string s1, string s2, string s3) {
int l1 = s1.size(),l2=s2.size(),l3=s3.size();
if(l1+l2!=l3) return false;
if(l3==0) return true;
bool dp[l1+1][l2+1];
for(int i=0;i<=l1;i++){
for(int j=0;j<=l2;j++){
dp[i][j]=false;
}
}
for(int i=1;i<=l1;i++){
if(s1[i-1]==s3[i-1])
dp[i][0]=true;
else
break;
}
for(int i=1;i<=l2;i++){
if(s2[i-1]==s3[i-1])
dp[0][i]=true;
else
break;
}
for(int i=1;i<=l1;i++){
for(int j=1;j<=l2;j++){
if(s1[i-1]==s3[i+j-1]&&s2[j-1]==s3[i+j-1])
dp[i][j]=dp[i-1][j]||dp[i][j-1];
else if(s1[i-1]==s3[i+j-1])
dp[i][j]=dp[i-1][j];
else if(s2[j-1]==s3[i+j-1])
dp[i][j]=dp[i][j-1];
else
dp[i][j]=false;
}
}
return dp[l1][l2];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息