720. Longest Word in Dictionary
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]
.
找出数组里最长的字符串,该字符串的子集也要在这个数组里,有多个答案则输出字典序最小的
C++(52ms):
1 class Solution { 2 public: 3 string longestWord(vector<string>& words) { 4 sort(words.begin(),words.end()) ; 5 unordered_set<string> Set; 6 string res = "" ; 7 for(string w : words){ 8 if (w.length() == 1 || Set.count(w.substr(0,w.length()-1))){ 9 res = w.length() > res.length() ? w : res ; 10 Set.insert(w) ; 11 } 12 } 13 return res ; 14 } 15 };
Java(36ms):
1 class Solution { 2 public String longestWord(String[] words) { 3 Arrays.sort(words); 4 Set<String> set = new HashSet<String>(); 5 String res = ""; 6 for (String w : words) { 7 if (w.length() == 1 || set.contains(w.substring(0, w.length() - 1))) { 8 res = w.length() > res.length() ? w : res; 9 set.add(w); 10 } 11 } 12 return res; 13 } 14 }