[leetcode] 720. Longest Word in Dictionary

网友投稿 289 2022-08-27

[leetcode] 720. Longest Word in Dictionary

Description

Given a list of strings words representing an English Dictionary, find the longest word in words that can be built one character at a time by other words in words. If there is more than one possible answer, return the longest word with the smallest lexicographical order.

If there is no answer, return the empty string. Example 1:

Input: words = ["w","wo","wor","worl", "world"]Output: "world"Explanation: The word "world" can be built one character at a time by "w", "wo", "wor", and "worl".

Example 2:

Input: words = ["a", "banana", "app", "appl", "ap", "apply", "apple"]Output: "apple"Explanation: Both "apply" and "apple" can be built from other words in the dictionary. However, "apple" is lexicographically smaller than "apply".

Note:

All the strings in the input will only contain lowercase letters.The length of words will be in the range [1, 1000].The length of words[i] will be in the range [1, 30].

分析

题目的意思是:找出字符串数组中的一个词,该词由字符串数组中其他的字符串一次添加一个字符得到,求找出其中最长的那个。

直接对长度为1的单词调用递归函数,在递归中,还是先判断单词和mxLen关系来更新结果res,然后就是遍历所有字符,加到单词后面,如果在集合中存在,调用递归函数,结束后恢复状态。

代码

class Solution {public: string longestWord(vector& words) { unordered_set s(words.begin(),words.end()); string res; int mxlen=0; for(string word:words){ if(word.size()==1){ solve(s,word,mxlen,res); } } return res; } void solve(unordered_set s,string word,int& mxlen,string& res){ if(word.size()>mxlen){ mxlen=word.size(); res=word; }else if(word.size()==mxlen){ res=min(res,word); } for(char c='a';c<='z';c++){ word.push_back(c); if(s.count(word)){ solve(s,word,mxlen,res); } word.pop_back(); } }};

参考文献

​​[LeetCode] Longest Word in Dictionary 字典中的最长单词​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[leetcode] 452. Minimum Number of Arrows to Burst Balloons
下一篇:被中消协点名后仍“顶风作案”,肯德基成也营销困也营销?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~