14. 最长公共前缀(有内存泄漏)

字典树

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;
}

};

Guess you like

Origin blog.csdn.net/qigezuishuaide/article/details/121069126