美文网首页
720. 词典中最长的单词

720. 词典中最长的单词

作者: 吃饭用盘装 | 来源:发表于2018-06-05 23:36 被阅读138次

内容

给出一个字符串数组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"。
注意:

所有输入的字符串都只包含小写字母。
words数组长度范围为[1,1000]。
words[i]的长度范围为[1,30]。


思路

既然是找最长的单词,然后又是一个无序数组,那么首先排序。
然后观察,如果这个最长的单词是有效的,那么它的依次从右侧减去一个字母的组合都应该在数组中存在,这个时候考虑到,如果每次都去这么大的数组中遍历,那么肯定超级慢。所以直接将数组中的所有字符串放入一个对象map中,每次需要判断单词的部分子串是否存在时,就去map中找。
然后还有个问题就是,这种单词可能有多个,这里需要将他们进行一个字符串大小的比较,通过改写一下sort方法即可。


代码

/**
词典中最长的单词

既然是找最长的单词,然后又是一个无序数组,那么首先排序。
然后观察,如果这个最长的单词是有效的,那么它的依次从右侧减去一个字母的组合都应该在数组中存在,这个时候考虑到,如果每次都去这么大的数组中遍历,那么肯定超级慢。所以直接将数组中的所有字符串放入一个对象map中,每次需要判断单词的部分子串是否存在时,就去map中找。
然后还有个问题就是,这种单词可能有多个,这里需要将他们进行一个字符串大小的比较,通过改写一下sort方法即可。
 * @param {string[]} words
 * @return {string}
 */
var longestWord = function (words) {
    var map = {};
    words.sort(function (a, b) {
        return a.length - b.length
    })

    for (var i = 0; i < words.length; i++) {
        map[words[i]] = 1;
    }

    var maxlens = [];
    for (var i = words.length - 1; i >= 0; i--) {
        var now = words[i] || '';
        var next = words[i - 1] || '';
        maxlens.push(now);
        if (now.length > next.length) {
            for (var j = 0; j < maxlens.length; j++) {
                if (!check(maxlens[j])) {
                    maxlens.splice(j, 1);
                    j--;
                }
            }

            if (maxlens.length > 0) {
                maxlens.sort(function (a, b) {
                    return a > b ? 1 : -1;
                })

                return maxlens[0];
            }
        }
    }

    function check(str) {
        for (var i = 0; i < str.length - 1; i++) {
            if (map[str.slice(0, str.length - i - 1)] != 1) {
                return false;
            }
        }

        return true;
    }

    return -1;
};

回到目录

相关文章

  • 2022-03-17 720词典中最长的单词

    每日打卡 720. 词典中最长的单词[https://leetcode-cn.com/problems/longe...

  • 『字典树』词典中最长的单词720

    题目相关 原题链接:720. 词典中最长的单词 - 力扣(LeetCode) 涉及知识:字典树 题目难度:★ 题目...

  • 720. 词典中最长的单词

    内容 给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐...

  • 单词相关问题总结

    0X00 单词比较问题总结 比较两个单词所用字符是否相同 0X01 单词搜索问题总结 前缀搜索 720. 词典中最...

  • 2021-11-23 720. 词典中最长的单词【Easy】

    给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加...

  • Leetcode 720 词典中最长的单词

    词典中最长的单词 题目 给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由word...

  • 133. 最长单词

    给一个词典,找出其中所有最长的单词。样例 在词典{"dog","google","facebook","inter...

  • OJ lintcode 最长单词

    给一个词典,找出其中所有最长的单词。您在真实的面试中是否遇到过这个题?Yes样例在词典{"dog","google...

  • Design & Coed 2: 找出最长单词

    找出最长单词 Find the Longest Word in a String 找出最长单词 在句子中找出最长的...

  • rime与rhyme

    rime /raɪm/ 这个单词,在一些比较现代的正式词典中,如剑桥英语词典中,是没有这个单词的解释的。而在国内...

网友评论

      本文标题:720. 词典中最长的单词

      本文链接:https://www.haomeiwen.com/subject/etrvsftx.html