[动态规划] leetcode 97 Interleaving String

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);
    }
};

猜你喜欢

转载自www.cnblogs.com/fish1996/p/11285067.html