当前位置: 面试刷题>> 词典中最长的单词 (经典算法题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
```
**码小课网站中有更多相关内容分享给大家学习**,希望以上解答对你有帮助!