/*动态规划法。
用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 发布
本文深入探讨动态规划法在解决字符串交织问题上的应用,通过具体实例展示了如何利用状态转移方程实现高效求解。从基础概念出发,逐步解析复杂问题的简化路径,为读者提供了一个清晰易懂的解决方案。
116

被折叠的 条评论
为什么被折叠?



