-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstr_trie.sublime-snippet
76 lines (72 loc) · 1.53 KB
/
str_trie.sublime-snippet
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<snippet>
<content><![CDATA[
//idx for pointer implementation
lint idx=1;
//multiset trie
// n -> max length of string & m -> no of strings
// vector<vector<lint>> trie(n*m,vector<lint>(character_size,-1));
// vector<lint> end_word(n*m,0);
//O(s.length())
void insert(vector<vector<lint>> &trie,vector<lint> &end_word,string s)
{
lint n=s.length();
lint p=1;
for(lint i=0;i<n;i++)
{
if(trie[p][s[i]-'a']!=-1)
{
p=trie[p][s[i]-'a'];
}
else
{
trie[p][s[i]-'a']=++idx;
p=idx;
}
}
end_word[p]++;
}
//O(s.length())
void del(vector<vector<lint>> &trie,vector<lint> &end_word,string s)
{
lint n=s.length();
lint p=1;
for(lint i=0;i<n;i++)
{
if(trie[p][s[i]-'a']!=-1)
{
p=trie[p][s[i]-'a'];
}
else
{
return;
}
}
if(end_word[p]>0)
end_word[p]--;
}
//O(s.length())
lint search(vector<vector<lint>> &trie,vector<lint> &end_word,string s)
{
lint n=s.length();
lint p=1;
for(lint i=0;i<n;i++)
{
if(trie[p][s[i]-'a']!=-1)
{
p=trie[p][s[i]-'a'];
}
else
{
return 0;
}
}
if(end_word[p]==0)
return 0;
return 1;
}
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>str_trie</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->
</snippet>