-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWordBreak using Trie
44 lines (44 loc) · 1.38 KB
/
WordBreak using Trie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Solution
{
public:
typedef struct TrieNode {
map<char, pair<int, TrieNode*>> children;
bool isEndOfWord = false;
} TrieNode;
void insert(TrieNode *root, string str) {
TrieNode *curr = root;
for(int i = 0; i < str.length(); i++) {
if(curr -> children[str[i]].second == nullptr) {
curr -> children[str[i]].second = new TrieNode();
}
curr -> children[str[i]].first++;
curr = curr -> children[str[i]].second;
}
curr -> isEndOfWord = true;
}
bool query(TrieNode *root, string str) {
TrieNode *curr = root;
for(int i = 0; i < str.length(); i++) {
if(curr -> children[str[i]].second == nullptr)
return false;
curr = curr -> children[str[i]].second;
}
if(curr != nullptr && curr -> isEndOfWord) return true;
}
int solve(string str, TrieNode *root) {
if(str.length() == 0) return 1;
for(int i = 1; i <= str.length(); i++) {
if(query(root, str.substr(0, i)) && solve(str.substr(i), root))
return 1;
}
return 0;
}
int wordBreak(string A, vector<string> &B) {
//code here
TrieNode *root = new TrieNode();
for(int i = 0; i < B.size(); i++) {
insert(root, B[i]);
}
return solve(A, root);
}
};