/*动态规划法。
用dp[i][j]==true表示s1[0...i-1]和s2[0...j-1]能组成s3[0...i+j-1],则
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) {
if(s1.size() + s2.size() != s3.size()) return false;
if(s1.empty() && s2.empty() && s3.empty()) return true;
bool dp[s1.size()+1][s2.size()+1];
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= s1.size(); ++i){
dp[i][0] = (s1.substr(0, i) == s3.substr(0, i));
}
for(int i = 1; i <= s2.size(); ++i){
dp[0][i] = (s2.substr(0, i) == s3.substr(0, i));
}
for(int i = 1; i <= s1.size(); ++i){
for(int j = 1; j <= s2.size(); ++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[s1.size()][s2.size()];
}
};
LeetCode之Interleaving String
最新推荐文章于 2024-10-01 18:52:56 发布