Leetcode字典树-720:词典中最长的单词
第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点。大佬看见请直接路过。
https://leetcode-cn.com/problems/longest-word-in-dictionary/
下面是代码与我的解析:
1 class Solution { 2 public: 3 4 class Tree{ 5 public://这里为了之后的调用需要明确,否则就被认定为是Tree的private,无法调用 6 bool has_words=false; 7 vector<Tree*> v; 8 9 Tree():has_words(false),v(26){}; 10 //初始化时对v传递参数26是实际上是产生了关于vector的一位数组 11 static void wordsinsert(Tree* t,string aim){ 12 for(char c:aim){ 13 if(!t->v[c-'a'])t->v[c-'a']=new Tree; 14 t=t->v[c-'a']; 15 } 16 t->has_words=true; 17 } 18 19 static bool searchwords(Tree* t,string aim){ 20 for(char c:aim){ 21 t=t->v[c-'a']; 22 if(!t->has_words)return false; 23 } 24 return true; 25 } 26 }; 27 28 string longestWord(vector<string>& words) { 29 Tree* root=new Tree; 30 for(string aim:words){//注意熟悉遍历的方法 31 Tree::wordsinsert(root,aim);//由于Tree中的后两个函数都声明了static类型,所以这里可以在没有对应的类型实例的情形下借助类型名直接调用函数 32 }//详细关于静态函数的解析(一定要看仔细!) 33 string longest=""; 34 for(string aim:words){ 35 if(Tree::searchwords(root,aim)){ 36 if(aim.size()>longest.size())longest=aim; 37 else if(aim.size()==longest.size()&&aim<longest)longest=aim; 38 }//字典序直接比较即可 39 } 40 return longest; 41 } 42 };
OK