您的位置:首页 > 其它

[算法作业-动态规划][LeetCode] 97. Interleaving String

2017-04-10 11:07 316 查看

[算法作业-动态规划][LeetCode] 97. 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] 表示s3[0:i+j] 是否可由 s1[0:i] 和 s2[0:j]构成。

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]))

)

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 + len2 != len3) return false;

vector<vector<bool>> dp(len1+1, vector<bool>(len2+1, false));
dp[0][0] = true;
for (int i=1; i<=len1; ++i) {
dp[i][0] = dp[i-1][0] && (s1[i-1] == s3[i-1]);
}
for (int j=1; j<=len2; ++j) {
dp[0][j] = dp[0][j-1] && (s2[j-1] == s3[j-1]);
}

for (int i=1; i<=len1; ++i) {
for (int j=1; j<=len2; ++j) {
dp[i][j] = dp[i][j] || (dp[i-1][j] && (s1[i-1] == s3[i+j-1]));
dp[i][j] = dp[i][j] || (dp[i][j-1] && (s2[j-1] == s3[i+j-1]));
}
}
return dp[len1][len2];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息