DFS
unknown
c_cpp
2 years ago
1.4 kB
5
Indexable
struct Node { Node *next[30]; bool word_end; Node() { memset(next, 0, sizeof(next)); word_end = false; } }; class Solution { public: Node *trie; bool global_check = false; vector<bool>vis; void Build(vector<string> &wordDict) { for (const auto &str : wordDict) { Node *p = trie; for (const auto &c : str) { if (p->next[c - 'a'] == nullptr) { p->next[c - 'a'] = new Node; } p = p->next[c - 'a']; } p->word_end = true; } } vector<int> match(const string &s, int index) { vector<int> res; Node *p = trie; while (index < s.length() && p != nullptr) { if (p->next[s[index] - 'a']) { p = p->next[s[index] - 'a']; index++; if (p->word_end) { res.push_back(index); } } else break; } return res; } void DFS(const string &s, int index) { if (index == s.length()) { global_check = true; return; } if (global_check) return; if(vis[index])return; vis[index] = true; auto nexts_index = match(s, index); for (const auto &i : nexts_index) { DFS(s, i); } } bool wordBreak(string s, vector<string> &wordDict) { trie = new Node; Build(wordDict); vis = vector<bool>(s.size()+1, false); DFS(s,0); return global_check; } };
Editor is loading...
Leave a Comment