当前位置: 面试刷题>> 词典中最长的单词 (经典算法题500道)


### 题目描述补充 给定一个字符串数组 `words`,每个字符串代表一个单词,这些单词可能由其他单词构成(即,一个单词可能是另一个单词的子串)。请编写一个函数,找出并返回数组中由其他单词构成的最长单词(即,最长且可以通过其他单词依次连接形成)。如果有多个这样的单词,则返回其中任意一个。 ### 示例 假设输入为: ``` ["w","wo","wor","worl", "world"] ``` 输出应为: ``` "world" ``` 因为 `"w"`,`"wo"`,`"wor"` 和 `"worl"` 都是 `"world"` 的子串,并且 `"world"` 是最长的满足条件的单词。 ### PHP 示例代码 ```php function longestWordInDictionary($words) { // 对单词按长度进行排序,确保短的单词先被处理 usort($words, function($a, $b) { return strlen($a) - strlen($b); }); $longestWord = ''; $wordSet = []; // 用于快速查找的集合 foreach ($words as $word) { // 检查该单词是否只由已经遍历过的单词的字母组成 if (strlen($word) > 1 && !in_array(substr($word, 0, strlen($word) - 1), $wordSet)) { continue; // 如果不能由前面的单词组成,则跳过 } $wordSet[$word] = true; // 将当前单词加入集合 // 更新最长单词 if (strlen($word) > strlen($longestWord)) { $longestWord = $word; } } return $longestWord; } // 测试 $words = ["w","wo","wor","worl", "world"]; echo longestWordInDictionary($words); // 输出: world ``` ### Python 示例代码 ```python def longestWordInDictionary(words): words.sort(key=len) # 按长度排序 word_set = set() longest_word = '' for word in words: # 如果单词(除了最后一个字符外)在集合中,则该单词可以由前面的单词组成 if len(word) > 1 and word[:-1] not in word_set: continue word_set.add(word) # 更新最长单词 if len(word) > len(longest_word): longest_word = word return longest_word # 测试 words = ["w", "wo", "wor", "worl", "world"] print(longestWordInDictionary(words)) # 输出: world ``` ### JavaScript 示例代码 ```javascript function longestWordInDictionary(words) { words.sort((a, b) => a.length - b.length); // 按长度排序 const wordSet = new Set(); let longestWord = ''; for (const word of words) { // 如果单词(除了最后一个字符外)不在集合中,则跳过 if (word.length > 1 && !wordSet.has(word.slice(0, -1))) { continue; } wordSet.add(word); // 更新最长单词 if (word.length > longestWord.length) { longestWord = word; } } return longestWord; } // 测试 const words = ["w", "wo", "wor", "worl", "world"]; console.log(longestWordInDictionary(words)); // 输出: world ``` **码小课网站中有更多相关内容分享给大家学习**,希望以上解答对你有帮助!
推荐面试题