problem:https://leetcode.com/problems/interleaving-string/
我用的方法是记忆搜索,直接尝试模拟匹配的过程,速度比较慢。
class Solution { public: vector<vector<vector<int>>> dp; bool dfs(const string& s1, const string& s2, const string& s3, int i, int j, int k) { if (k == s3.size()) { if (i == s1.size() && j == s2.size()) return true; return false; } if (dp[i][j][k] != 2) return dp[i][j][k]; if (i < s1.size() && j < s2.size() && s1[i] == s3[k] && s2[j] == s3[k]) { return dp[i][j][k] = dfs(s1, s2, s3, i + 1, j, k + 1) || dfs(s1, s2, s3, i, j + 1, k + 1); } else if (i < s1.size() && s1[i] == s3[k]) { return dp[i][j][k] = dfs(s1, s2, s3, i + 1, j, k + 1); } else if (j < s2.size() && s2[j] == s3[k]) { return dp[i][j][k] = dfs(s1, s2, s3, i, j + 1, k + 1); } return dp[i][j][k] = false; } bool isInterleave(string s1, string s2, string s3) { dp.resize(s1.size() + 1, vector<vector<int>>(s2.size() + 1, vector<int>(s3.size() + 1, 2))); return dfs(s1, s2, s3, 0, 0, 0); } };