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


题目描述补充

给定一个字符串数组 words,每个字符串代表一个单词,这些单词可能由其他单词构成(即,一个单词可能是另一个单词的子串)。请编写一个函数,找出并返回数组中由其他单词构成的最长单词(即,最长且可以通过其他单词依次连接形成)。如果有多个这样的单词,则返回其中任意一个。

示例

假设输入为:

["w","wo","wor","worl", "world"]

输出应为:

"world"

因为 "w""wo""wor""worl" 都是 "world" 的子串,并且 "world" 是最长的满足条件的单词。

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 示例代码

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 示例代码

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

码小课网站中有更多相关内容分享给大家学习,希望以上解答对你有帮助!

推荐面试题