720. 词典中最长的单词
给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。
若无答案,则返回空字符串。
实例
输入:
words = ["w","wo","wor","worl", "world"]
输出: "world"
解释:
单词"world"可由"w", "wo", "wor", 和 "worl"添加一个字母组成。
思路:
插入每一个word,构成一棵树,查找算法时,判断是否为该模式中最长的,如果不是,继续寻找。
对比查找每个模式中最长的词,找到结果。
#include<cstring>
class Solution {
public:
struct TrieNode{
bool end;
TrieNode* child[26];
TrieNode():end(false){
for(int i = 0; i < 26; i++) child[i] = NULL;
}
};
void insert(string word){
if(word == "")return;
TrieNode * node = root;
int index = 0;
for(int i = 0; i<word.size();i++){
index = word[i]-'a';
if(node->child[index]==NULL)node->child[index]=new TrieNode();
node = node->child[index];
}
node->end = true;
}
bool search(string word){