您的位置:首页 > 其它

[leetcode] Interleaving String

2014-07-17 13:00 417 查看
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,设立一个数组dp[0][0],dp[i][j],表示的是s3能被长度为i的s1和长度为j的s2交替迭代组成,那么当s3[i+j-1]=s1[i-1]的时候dp[i][j]=dp[i-1][j],当s3[i+j-1]=s2[j-1]的时候dp[i][j]=dp[i][j-1]

代码:

class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int len1=s1.size(),len2=s2.size(),len3=s3.size();
if(len1+len2!=len3) return false;
if(s1+s2==s3) return true;
bool dp[1000][1000];
dp[0][0]=true;
for(int i=1;i<=len1;i++){
dp[i][0]=(dp[i-1][0] && s3[i-1]==s1[i-1]);
}
for(int j=1;j<=len2;j++){
dp[0][j]=(dp[0][j-1] && s3[j-1]==s2[j-1]);
}
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;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]);
}
}
return dp[len1][len2];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法