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.
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:
words
will be in the range [1, 1000]
.words[i]
will be in the range [1, 30]
.Related Topics:
Hash Table, Trie
Similar Questions:
// OJ: https://leetcode.com/problems/longest-word-in-dictionary/
// Author: github.com/lzl124631x
// Time: O(NW)
// Space: O(Nw)
class Solution {
public:
string longestWord(vector<string>& words) {
unordered_set<string> s;
for (auto &w : words) s.insert(w);
string ans;
for (auto &w : words) {
if (w.size() < ans.size()) continue;
auto x = w;
do {
x.pop_back();
} while (x.size() && s.find(x) != s.end());
if (x.size()) continue;
if (w.size() > ans.size()
|| (w.size() == ans.size() && w < ans)) ans = w;
}
return ans;
}
};