1 题目描述
2 解题思路
动态规划
3 代码实现
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<char> str1 = toCharArray(s1);
vector<char> str2 = toCharArray(s2);
vector<char> str3 = toCharArray(s3);
bool** dp = new bool*[len1 + 1];
for(int i = 0; i < len1 + 1; i++) dp[i] = new bool[len2 + 1];
dp[0][0] = true;
for(int j = 1; j < len2 + 1; j++) dp[0][j] = dp[0][j - 1] && str2[j - 1] == str3[j - 1];
for(int i = 1; i < len1 + 1; i++) dp[i][0] = dp[i - 1][0] && str1[i - 1] == str3[i - 1];
for(int i = 1; i < len1 + 1; i++)
for(int j = 1; j < len2 + 1; j++)
dp[i][j] = (dp[i - 1][j] && str1[i - 1] == str3[i + j - 1]) || (dp[i][j - 1] && str2[j - 1] == str3[i + j - 1]);
return dp[len1][len2];
}
vector<char> toCharArray(string s){
vector<char> str;
for(int i = 0; i < s.length(); i++) str.push_back(s[i]);
return str;
}
};
4 运行结果
运行时间:3ms
占用内存:376k