add: 230317
This commit is contained in:
parent
cb6cd0b214
commit
ea38815e5c
|
|
@ -0,0 +1,69 @@
|
|||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* 208. Implement Trie (Prefix Tree)
|
||||
*
|
||||
* A trie (pronounced as "try") or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.
|
||||
*
|
||||
* Implement the Trie class:
|
||||
*
|
||||
* Trie() Initializes the trie object.
|
||||
* void insert(String word) Inserts the string word into the trie.
|
||||
* boolean search(String word) Returns true if the string word is in the trie (i.e., was inserted before), and false otherwise.
|
||||
* boolean startsWith(String prefix) Returns true if there is a previously inserted string word that has the prefix prefix, and false otherwise.
|
||||
*/
|
||||
|
||||
struct TrieNode {
|
||||
TrieNode* p[26] = {};
|
||||
bool terminate = false;
|
||||
};
|
||||
|
||||
class Trie {
|
||||
private:
|
||||
TrieNode r;
|
||||
|
||||
public:
|
||||
Trie() = default;
|
||||
|
||||
void insert(const std::string& word) {
|
||||
TrieNode* ptr = &this->r;
|
||||
for (char i : word) {
|
||||
if (!ptr->p[i - 'a'])
|
||||
ptr->p[i - 'a'] = new TrieNode;
|
||||
ptr = ptr->p[i - 'a'];
|
||||
}
|
||||
ptr->terminate = true;
|
||||
}
|
||||
|
||||
bool search(const std::string& word) const {
|
||||
const TrieNode* ptr = &this->r;
|
||||
for (char i : word) {
|
||||
if (!ptr->p[i - 'a'])
|
||||
return false;
|
||||
ptr = ptr->p[i - 'a'];
|
||||
}
|
||||
return ptr && ptr->terminate;
|
||||
}
|
||||
|
||||
bool startsWith(const std::string& prefix) const {
|
||||
const TrieNode* ptr = &this->r;
|
||||
for (char i : prefix) {
|
||||
if (!ptr->p[i - 'a'])
|
||||
return false;
|
||||
ptr = ptr->p[i - 'a'];
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
Trie trie;
|
||||
trie.insert("apple");
|
||||
std::cout << trie.search("apple"); // return True
|
||||
std::cout << trie.search("app"); // return False
|
||||
std::cout << trie.startsWith("app"); // return True
|
||||
trie.insert("app");
|
||||
std::cout << trie.search("app"); // return True
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -3,4 +3,4 @@ PROJECT(2303)
|
|||
|
||||
SET(CMAKE_CXX_STANDARD 23)
|
||||
|
||||
ADD_EXECUTABLE(2303 230317-CN.cpp)
|
||||
ADD_EXECUTABLE(2303 230317.cpp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue