#include<bits/stdc++.h>
using namespace std;
class Trie{
private:
static const int chars =26;
Trie* child[chars];
bool isLeaf {};
public:
Trie(){
memset(child,0,sizeof(child));
}
void insert(string s ,int idx){
if(idx == s.length()){
isLeaf =true;
}
else{
int cur = s[idx]-'a';
if(child[cur] == nullptr){
child[cur] = new Trie();
}
child[cur]->insert(s,idx+1);
}
}
bool wordExit(string s,int idx){
if(idx == s.size()) return isLeaf;
int cur = s[idx]-'a';
if(!child[cur]) return false;
return child[cur]->wordExit(s,idx+1);
}
bool prefixExit(string s,int idx){
if(idx == s.size()) return true;
int cur = s[idx]-'a';
if(!child[cur]) return false;
return child[cur]->prefixExit(s,idx+1);
}
//Problem 3 : home work 2
bool findAfter(string s,int idx){
for(int i=0;i<s.length();i++){
char c = s[i];
for(char j='a';j<='z';j++){
if(j!=c){
s[i]=j;
if(wordExit(s,0)){
return true;
}
}
}
s[i]=c;
}
return false;
}
};
int main(){
Trie trie;
trie.insert("hello",0);
trie.insert("world",0);
cout << boolalpha << trie.findAfter("heldo",0)<<endl;
cout <<boolalpha<< trie.findAfter("worsd",0)<<endl;
cout <<boolalpha<<trie.findAfter("hello",0)<<endl;
cout <<boolalpha<<trie.findAfter("manar",0)<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFRyaWV7CiAgICBwcml2YXRlOgogICAgc3RhdGljIGNvbnN0IGludCBjaGFycyA9MjY7CiAgICBUcmllKiBjaGlsZFtjaGFyc107CiAgICBib29sIGlzTGVhZiB7fTsKCiAgICBwdWJsaWM6CiAgICAKICAgIFRyaWUoKXsKICAgICAgICBtZW1zZXQoY2hpbGQsMCxzaXplb2YoY2hpbGQpKTsKICAgIH0KICAgIAogICAgdm9pZCBpbnNlcnQoc3RyaW5nIHMgLGludCBpZHgpewogICAgCQogICAgICAgIGlmKGlkeCA9PSBzLmxlbmd0aCgpKXsKICAgICAgICAgICAgaXNMZWFmID10cnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbHNlewogICAgICAgICAgICBpbnQgY3VyID0gc1tpZHhdLSdhJzsKICAgICAgICAgICAgaWYoY2hpbGRbY3VyXSA9PSBudWxscHRyKXsKICAgICAgICAgICAgICAgIGNoaWxkW2N1cl0gPSBuZXcgVHJpZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNoaWxkW2N1cl0tPmluc2VydChzLGlkeCsxKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGJvb2wgd29yZEV4aXQoc3RyaW5nIHMsaW50IGlkeCl7CiAgICAgICAgaWYoaWR4ID09IHMuc2l6ZSgpKSByZXR1cm4gaXNMZWFmOwogICAgICAgIGludCBjdXIgPSBzW2lkeF0tJ2EnOwogICAgICAgIGlmKCFjaGlsZFtjdXJdKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIGNoaWxkW2N1cl0tPndvcmRFeGl0KHMsaWR4KzEpOwogICAgfQogICAgCiAgICBib29sIHByZWZpeEV4aXQoc3RyaW5nIHMsaW50IGlkeCl7CiAgICAgICAgaWYoaWR4ID09IHMuc2l6ZSgpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpbnQgY3VyID0gc1tpZHhdLSdhJzsKICAgICAgICBpZighY2hpbGRbY3VyXSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiBjaGlsZFtjdXJdLT5wcmVmaXhFeGl0KHMsaWR4KzEpOwogICAgfQogICAgCiAgICAvL1Byb2JsZW0gMyA6IGhvbWUgd29yayAyCiAgICBib29sIGZpbmRBZnRlcihzdHJpbmcgcyxpbnQgaWR4KXsKICAgICAgICBmb3IoaW50IGk9MDtpPHMubGVuZ3RoKCk7aSsrKXsKICAgICAgICAgICAgY2hhciBjID0gc1tpXTsKICAgICAgICAgICAgZm9yKGNoYXIgaj0nYSc7ajw9J3onO2orKyl7CiAgICAgICAgICAgICAgICBpZihqIT1jKXsKICAgICAgICAgICAgICAgICAgICBzW2ldPWo7CiAgICAgICAgICAgICAgICAgICAgaWYod29yZEV4aXQocywwKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzW2ldPWM7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAp9OwppbnQgbWFpbigpewogICAgVHJpZSB0cmllOwogICAgdHJpZS5pbnNlcnQoImhlbGxvIiwwKTsKICAgIHRyaWUuaW5zZXJ0KCJ3b3JsZCIsMCk7CiAgICAKICAgIGNvdXQgPDwgYm9vbGFscGhhIDw8IHRyaWUuZmluZEFmdGVyKCJoZWxkbyIsMCk8PGVuZGw7CiAgICBjb3V0IDw8Ym9vbGFscGhhPDwgdHJpZS5maW5kQWZ0ZXIoIndvcnNkIiwwKTw8ZW5kbDsKICAgIGNvdXQgPDxib29sYWxwaGE8PHRyaWUuZmluZEFmdGVyKCJoZWxsbyIsMCk8PGVuZGw7CiAgICBjb3V0IDw8Ym9vbGFscGhhPDx0cmllLmZpbmRBZnRlcigibWFuYXIiLDApPDxlbmRsOwogICAgcmV0dXJuIDA7Cn0=