您的位置:首页 > 其它

Leetcode 97. Interleaving String

2017-12-29 18:25 369 查看
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.

超时 99 / 101

class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
if (s3.size() != (s1.size() + s2.size())) return false;

if (s3 == "" && s1 == "" && s2 == "") return true;

if (s1[0] == s3[0] && isInterleave(string(s1.begin() + 1, s1.end()), s2, string(s3.begin() + 1, s3.end())))
return true;
if (s2[0] == s3[0] && isInterleave(s1, string(s2.begin() + 1, s2.end()), string(s3.begin() + 1, s3.end())))
return true;
return false;
}
};


动态规划

class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
size_t n1 = s1.size();
size_t n2 = s2.size();
size_t n3 = s3.size();
if (n3 != n2 + n1) return false;

vector<vector<int> >  dp(n1 + 1, vector<int>(n2 + 1, 0));
dp[0][0] = 1;
for (size_t i = 1; i <= n1; ++i) {
if (dp[i - 1][0] == 1 && s3[i - 1] == s1[i - 1])
dp[i][0] = 1;
}

for (size_t i = 1; i <= n2; ++i) {
if (dp[0][i - 1] == 1 && s3[i - 1] == s2[i - 1])
dp[0][i] = 1;
}

for (size_t i = 1; i <= n1; ++i) {

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