标签:ast sample enter comm sea ade compile nod tin
前面学了Trie,那么就即学即用。运用Trie数据结构来解决这道题目。
本题目比較简单,当然能够不使用Trie。只是多用高级数据结构还是非常有优点的。
题目:
| input | output |
|---|---|
6 na no ni ki ka ku k |
ka ki ku |
本题就是实现一个简单的字典提示功能,能够使用hash表的方法来做。实现起来也非常easy。
这里我做了个Trie Class来实现:
#include <iostream>
using namespace std;
#define ALPHA_SIZE 26
#define CHAR_TO_INDEX(c) (c - ‘a‘)
struct HieroglyphsTrie_Node
{
int val;
HieroglyphsTrie_Node *children[ALPHA_SIZE];
};
struct HieroglyphsTrie
{
HieroglyphsTrie_Node *root;
int size;
};
class HieroglyphsTrieClass
{
HieroglyphsTrie *pTrie;
public:
HieroglyphsTrieClass()
{
pTrie = (HieroglyphsTrie *) malloc (sizeof(HieroglyphsTrie));
init();
}
HieroglyphsTrie_Node *getNode()
{
HieroglyphsTrie_Node *pNode = nullptr;
pNode = (HieroglyphsTrie_Node *)malloc(sizeof(HieroglyphsTrie_Node));
if (pNode)
{
pNode->val = 0;
for (int i = 0; i < ALPHA_SIZE; i++)
{
pNode->children[i] = nullptr;
}
}
return pNode;
}
void init()
{
pTrie->root = getNode();
pTrie->size = 0;
}
void insert(const char key[])
{
int len = strlen(key);
int id = 0;
HieroglyphsTrie_Node *pCrawl = pTrie->root;
pTrie->size++;
for (int lv = 0; lv < len; lv++)
{
id = CHAR_TO_INDEX(key[lv]);
if (!pCrawl->children[id])
{
pCrawl->children[id] = getNode();
}
pCrawl = pCrawl->children[id];
}
pCrawl->val = pTrie->size;
}
int search(char key[])
{
int len = strlen(key);
int id = 0;
HieroglyphsTrie_Node *pCrawl = pTrie->root;
for (int lv = 0; lv < len; lv++)
{
id = CHAR_TO_INDEX(key[lv]);
if (!pCrawl->children[id]) return 0;
pCrawl = pCrawl->children[id];
}
return (int)(0 != pCrawl->val);
}
void HieroglyphsRun()
{
int n = 0;
cin>>n;
char ch[3];//不能是ch[2],由于后面还要多一个‘\0‘终止符
while (n--)
{
cin>>ch;
insert(ch);
}
char k;
cin>>k;
HieroglyphsTrie_Node *pCrawl = nullptr;
pCrawl = pTrie->root->children[CHAR_TO_INDEX(k)];
if (pCrawl)
{
for (int i = 0; i < ALPHA_SIZE; i++)
{
if (pCrawl->children[i])
{
cout<<k<<char(‘a‘+i)<<endl;
}
}
}
}
};
int main()
{
HieroglyphsTrieClass hie;
hie.HieroglyphsRun();
return 0;
}
Timus 1545. Hieroglyphs Trie的即学即用 实现字典提示功能
标签:ast sample enter comm sea ade compile nod tin
原文地址:http://www.cnblogs.com/lxjshuju/p/7142476.html