1. 题目描述
2. 解题思路
(1) 对words
中所有字符按照长度从小到大进行排序,若长度相同则按照字典序从大到小排序
;
(2) 使用一个unordered_set
来存储可能存在的最终结果的前缀;
(3) 依次遍历排序后的词典序列,判断当前字符串的前缀(除最后一个字符外的字符串)是否存在于集合中,若存在则将当前字符串加入集合中并记录当前结果。
3. 代码实现
class Solution {
public:
string longestWord(vector<string>& words) {
string res = "";
// 按照字符串长度进行排序,长度相同按照字典序从大向小排序
sort(words.begin(), words.end(), [](const string& a, const string& b) {
return a.size() != b.size() ? a.size() < b.size() : a > b;
});
unordered_set<string> set;
set.insert("");
for (auto word : words) {
if (set.count(word.substr(0, word.size() - 1))) {
set.insert(word);
res = word;
}
}
return res;
}
};