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".
题目:给出一个words的字符串集合,找出可以由其中可以由一个接一个字符组装的最大字符串。
Sol:
class Solution {
public:
string longestWord(vector<string>& words) {
sort(words.begin(), words.end());
unordered_set<string> built;
string res;
for (string w : words) {
if (w.size() == 1 || built.count(w.substr(0, w.size()-1))) {
//cout << w << " " << w.substr(0, w.size()-1) << endl;
res = w.size() > res.size() ? w : res;
built.insert(w);
}
}
return res;
}
};
附:
使用了unordered_set,每次使用
built.count(w.substr(0, w.size()-1)))
查询前一个字符串是否存在。