字典树
class Solution {
public:
class Node
{
public:
unordered_map<char, Node*>trie;
int end;
Node():end(0){};
};
void insert(Node* root, string a)
{
auto node = root;
for(int i=0; i<(int)a.length(); ++i)
{
Node* newNode = NULL;
auto trieFind = node->trie.find(a[i]);
if(trieFind==node->trie.end())
{
newNode = new Node;
node->trie.insert(pair<char, Node*>(a[i], newNode));
}
else
newNode = trieFind->second;
node = newNode;
}
++node->end;
}
string longestCommonPrefix(vector<string>& strs) {
Node root;
string ret = "";
if(strs.empty())
return "";
for(string strvec : strs)
insert(&root, strvec);
auto pnode = &root;
while(1==pnode->trie.size() && 0==pnode->end)
{
ret += pnode->trie.begin()->first;
pnode = pnode->trie.begin()->second;
}
return ret;
}
};