Trie--HackerRank - contacts
#include<bits/stdc++.h>
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<istream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct node
{
int c=0;
bool mark;
node* next[26+1];
node()
{
mark=false;
for(int i=0; i<26; i++)
{
next[i]=NULL;
}
}
};
node* root=NULL;
void Insert(string s)
{
node* newnode=root;
for(int i=0; i<s.size(); i++)
{
int id=s[i]-'a';
if(newnode->next[id]==NULL)
{
newnode->next[id]=new node();
}
newnode=newnode->next[id];
newnode->c++;
}
newnode->mark=1;
}
int Search(string s)
{
node* newnode=root;
for(int i=0; i<s.size(); i++)
{
int id=s[i]-'a';
if(newnode->next[id]==NULL)
{
return 0;
}
newnode=newnode->next[id];
}
return newnode->c;
}
void del(node* newnode)
{
for(int i=0; i<10; i++)
{
if(newnode->next[i])
{
del(newnode->next[i]);
}
}
delete(newnode);
}
int main()
{
int t;
cin>>t;
root =new node();
while(t--)
{
string a,b;
cin>>a;
cin>>b;
if(a == "add")
{
Insert(b);
}
else if(a=="find")
{
int k=Search(b);
cout<<k<<endl;
}
}
del(root);
}
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<istream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct node
{
int c=0;
bool mark;
node* next[26+1];
node()
{
mark=false;
for(int i=0; i<26; i++)
{
next[i]=NULL;
}
}
};
node* root=NULL;
void Insert(string s)
{
node* newnode=root;
for(int i=0; i<s.size(); i++)
{
int id=s[i]-'a';
if(newnode->next[id]==NULL)
{
newnode->next[id]=new node();
}
newnode=newnode->next[id];
newnode->c++;
}
newnode->mark=1;
}
int Search(string s)
{
node* newnode=root;
for(int i=0; i<s.size(); i++)
{
int id=s[i]-'a';
if(newnode->next[id]==NULL)
{
return 0;
}
newnode=newnode->next[id];
}
return newnode->c;
}
void del(node* newnode)
{
for(int i=0; i<10; i++)
{
if(newnode->next[i])
{
del(newnode->next[i]);
}
}
delete(newnode);
}
int main()
{
int t;
cin>>t;
root =new node();
while(t--)
{
string a,b;
cin>>a;
cin>>b;
if(a == "add")
{
Insert(b);
}
else if(a=="find")
{
int k=Search(b);
cout<<k<<endl;
}
}
del(root);
}
Comments
Post a Comment