class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int len1 = s1.length(), len2 = s2.length(), len3 = s3.length();
if(len3 != len1 + len2){
return false;
}
if(len1 == 0){
return s2 == s3;
}
if(len2 == 0){
return s1 == s3;
}
vector<vector<int> >dp;
dp.resize(len2 + 1);
for(int i = 0; i <= len2; ++i){
dp[i].resize(len3 + 1, 0);
}
dp[0][0] = 1;
dp[1][1] = s2[0] == s3[0];
dp[0][1] = s1[0] == s3[0];
int leftlen1;
for(int i = 2; i <= len3; ++i){
//j == 0, completely match str1
leftlen1 = i;
if(i <= len1){
if(s3[i - 1] == s1[leftlen1 - 1]){
dp[0][i] |= dp[0][i - 1];
}
}
for(int j = 1; j <= min(i, len2); ++j){
if(s3[i - 1] == s2[j - 1]){
dp[j][i] = dp[j - 1][i - 1];
}
leftlen1 = i - j;
if(leftlen1 == 0 || leftlen1 > len1){
continue;
}
if(s3[i - 1] == s1[leftlen1 - 1]){
dp[j][i] |= dp[j][i - 1];
}
}
}
return dp[len2][len3];
}
};
leetcode Interleaving String
最新推荐文章于 2019-09-18 20:15:24 发布