您的位置:首页 > 其它

97. Interleaving String

2016-09-09 13:46 183 查看
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.

判断目标字符串是否由两个原字符串字符交叉构成

动态规划的解题思路

db[i][j]=db[i-1][j]&&(s3[i+j-1]==s1[i-1])||db[i][j-1]&&(s3[i+j-1]==s2[j-1]);
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int len1 = s1.length();
int len2 = s2.length();
int len3 = s3.length();

if(len1==0&&len2==0&&len3==0)
return true;
if(len3>len2+len1)
return false;

vector<vector<bool> > db(len1+1,vector<bool>(len2+1,false));
db[0][0]=true;

for(int i=1;i<=len1;i++)
db[i][0]=db[i-1][0]&&(s3[i-1]==s1[i-1]);

for(int i=1;i<=len2;i++)
db[0][i]=db[0][i-1]&&(s3[i-1]==s2[i-1]);

for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
db[i][j]=db[i-1][j]&&(s3[i+j-1]==s1[i-1])||db[i][j-1]&&(s3[i+j-1]==s2[j-1]);

return db[len1][len2];

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: