LeetCode: Implement Trie (Prefix Tree)
2015-06-24 14:13
357 查看
Implement a trie with
and
Note:
You may assume that all inputs are consist of lowercase letters
class TrieNode {
public:
// Initialize your data structure here.
TrieNode(char input = '#'): isEnd(false)
{
}
bool isEnd;
unordered_map<char, TrieNode*> child;
};
class Trie {
public:
Trie() {
root = new TrieNode();
}
// Inserts a word into the trie.
void insert(string word) {
TrieNode *iter = root;
for(int i = 0; i < word.size(); i++)
{
if(iter->child.find(word[i]) != iter->child.end())
{
iter = iter->child[word[i]];
}
else
{
TrieNode *temp = new TrieNode(word[i]);
iter->child[word[i]] = temp;
iter = temp;
}
}
iter->isEnd = true;
}
// Returns if the word is in the trie.
bool search(string word) {
TrieNode *iter = root;
for(int i = 0; i < word.size(); i++)
{
if(iter->child.find(word[i]) != iter->child.end())
{
iter = iter->child[word[i]];
}
else
{
return false;
}
}
if(iter->isEnd == true)
return true;
else
return false;
}
// Returns if there is any word in the trie
// that starts with the given prefix.
bool startsWith(string prefix) {
TrieNode *iter = root;
for(int i = 0; i < prefix.size(); i++)
{
if(iter->child.find(prefix[i]) != iter->child.end())
{
iter = iter->child[prefix[i]];
}
else
{
return false;
}
}
return true;
}
private:
TrieNode* root;
};
// Your Trie object will be instantiated and called as such:
// Trie trie;
// trie.insert("somestring");
// trie.search("key");
insert,
search,
and
startsWithmethods.
Note:
You may assume that all inputs are consist of lowercase letters
a-z.
class TrieNode {
public:
// Initialize your data structure here.
TrieNode(char input = '#'): isEnd(false)
{
}
bool isEnd;
unordered_map<char, TrieNode*> child;
};
class Trie {
public:
Trie() {
root = new TrieNode();
}
// Inserts a word into the trie.
void insert(string word) {
TrieNode *iter = root;
for(int i = 0; i < word.size(); i++)
{
if(iter->child.find(word[i]) != iter->child.end())
{
iter = iter->child[word[i]];
}
else
{
TrieNode *temp = new TrieNode(word[i]);
iter->child[word[i]] = temp;
iter = temp;
}
}
iter->isEnd = true;
}
// Returns if the word is in the trie.
bool search(string word) {
TrieNode *iter = root;
for(int i = 0; i < word.size(); i++)
{
if(iter->child.find(word[i]) != iter->child.end())
{
iter = iter->child[word[i]];
}
else
{
return false;
}
}
if(iter->isEnd == true)
return true;
else
return false;
}
// Returns if there is any word in the trie
// that starts with the given prefix.
bool startsWith(string prefix) {
TrieNode *iter = root;
for(int i = 0; i < prefix.size(); i++)
{
if(iter->child.find(prefix[i]) != iter->child.end())
{
iter = iter->child[prefix[i]];
}
else
{
return false;
}
}
return true;
}
private:
TrieNode* root;
};
// Your Trie object will be instantiated and called as such:
// Trie trie;
// trie.insert("somestring");
// trie.search("key");
相关文章推荐
- ehcache持久化
- dstat
- (一)ADO.NET概述及其重要的类
- FindContours 寻找轮廓 参数
- markdown
- mybatis报错:Expected one result (or null) to be returned by selectOne(), but found: 20
- javaWeb系列之十六(过滤器)
- javaWeb系列之十七(上传下载)
- java写文件
- Ubuntu 14.10 下运行进程实时监控pidstat命令详解
- linux操作系统-设置静态ip
- php 字符串
- XSLT 处理程序是如何工作的
- mongDB学习分享1
- 6.24
- Linux 可执行文件结构与进程结构
- JavaWeb系列之十五(监听器)
- sgu-265. Wizards
- readonly 和 disable的区别
- Ubuntu 14.10 下CPU实时监控mpstat命令详解