其他分享
首页 > 其他分享> > 单词拆分(Leetcode-139)-记忆化搜索&DFS

单词拆分(Leetcode-139)-记忆化搜索&DFS

作者:互联网

题目

知识点

思路

记忆化搜索

代码

class Solution {
public:
    map<int, vector<int>> m;  // index - 位置
    int ed;
    int vis[1000];

    bool dfs(int depth) {
        int &ans = vis[depth];
        if (ans != -1) return ans;  // 这个depth后续访问已经做过,是走不通的

        if (depth == ed) return true;
        if (depth > ed) return false;

        if (m.count(depth)) {
            for (int i:m[depth]) {
                if (dfs(i + 1)) {
                    ans = 1;  // 这个depth可以走
                    return true;
                }
            }
        }
        ans = 0;
        return false;
    }

    bool wordBreak(string s, vector<string> &wordDict) {
        ed = s.size();
        memset(vis, -1, sizeof(int[1000]));
        for (const string &i:wordDict) {
            int b = 0, index;
            bool end = false;
            while (!end) {
                if (b > s.size()) break;
                index = s.find(i, b);
                if (index != -1) {
                    if (!m.count(index)) {
                        m[index] = vector<int>(1, index + i.size() - 1);
                    } else {
                        m[index].emplace_back(index + i.size() - 1);
                    }
                    b += 1;
                } else {
                    end = true;
                }
            }
        }
        return dfs(0);
    }
};

标签:index,return,int,位置,DFS,vis,depth,139,Leetcode
来源: https://blog.csdn.net/weixin_44855409/article/details/118933992