美文网首页
(trie,dfs)472. 连接词

(trie,dfs)472. 连接词

作者: 来到了没有知识的荒原 | 来源:发表于2021-10-02 10:37 被阅读0次

    472. 连接词

    trie+dfs

    const int N = 100010;
    int son[N][26];
    int cnt[N], idx;
    bool vis[N];
    
    class Solution {
     public:
      void insert(string &s) {
        int p = 0;
        for (auto c : s) {
          int u = c - 'a';  // 确定分支
          if (!son[p][u]) son[p][u] = ++idx;
          p = son[p][u];
        }
        cnt[p] = 1;
      }
      bool query(string &s, int cur) {
        int p = 0;
        if (cur == s.size()) return true;
        if (vis[cur]) return false;
        for (int i = cur; i < s.size(); i++) {
          int u = s[i] - 'a';
          if (!son[p][u]) break;
          p = son[p][u];
          if (cnt[p]) {
            if (query(s, i + 1)) return true;
          }
        }
        vis[cur] = true;
        return false;
      }
      vector<string> findAllConcatenatedWordsInADict(vector<string> &words) {
        sort(words.begin(), words.end(),
             [](const string &a, const string &b) { return a.size() < b.size(); });
        memset(son, 0, sizeof son), memset(cnt, 0, sizeof cnt),
            memset(vis, 0, sizeof vis);
        idx = 0;
    
        vector<string> res;
        for (auto &s : words) {
          if (s.empty()) continue;
          if (query(s, 0)) res.push_back(s);
          insert(s);
          memset(vis, 0, sizeof vis);
        }
    
        return res;
      }
    };
    

    相关文章

      网友评论

          本文标题:(trie,dfs)472. 连接词

          本文链接:https://www.haomeiwen.com/subject/vugpnltx.html