题目
给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。
若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。
示例 1:
输入:words = [“w”,“wo”,“wor”,“worl”, “world”]
输出:“world”
解释: 单词"world"可由"w", “wo”, “wor”, 和 "worl"逐步添加一个字母组成。
示例 2:
输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]
输出:“apple”
解释:“apply” 和 “apple” 都能由词典中的单词组成。但是 “apple” 的字典序小于 “apply”
代码
public class Solution
{
public string LongestWord(string[] words)
{
Array.Sort(words, (a, b) =>
{
if (a.Length != b.Length) return a.Length - b.Length;
return b.CompareTo(a);
});
HashSet<string> set = new HashSet<string>();
set.Add(String.Empty);
string s = String.Empty;
foreach (var word in words)
{
if (set.Contains(word.Substring(0, word.Length - 1)))
{
set.Add(word);
s = word;
}
}
return s;
}
}