开启我的LeetCode刷题日记:524. 通过删除字母匹配到字典里最长单词

143 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

编程世界总是离不了算法

最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力

于是决定蹭着假期,加强算法和数据结构相关的知识

那怎么提升呢?

其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅

第一阶段目标是:200道,每天12

为了不乱,本系列文章目录分为三部分:

  1. 今日题目:xxx
  2. 我的思路
  3. 代码实现

今天题目:524. 通过删除字母匹配到字典里最长单词

给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。

如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。

 

示例 1:

输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"] 输出:"apple"

示例 2:

输入:s = "abpcplea", dictionary = ["a","b","c"] 输出:"a"  

我的思路

第一步.拿dictionary里的单词 逐个和s进行匹配;

第二步:2个指针同时先指向2个单词的第一个字母的位置如果 2个指针指向的字符相同则同时++;否则只有指向s的指针++;

第三步:如果指向word的指针先指向空 则证明是符合条件的;然后看他是不是长度最长且字母序最小的字符串

代码实现

/**
 * @param {string} s
 * @param {string[]} dictionary
 * @return {string}
 */
var findLongestWord = function(s, dictionary) {
    const length = s.length;
    let res = "";
    // 第一步.拿dictionary里的单词 逐个和s进行匹配;
    for (const word of dictionary) {
        const len = word.length;
        let i = 0, j = 0;
        // 第二步:2个指针同时先指向2个单词的第一个字母的位置如果 2个指针指向的字符相同则同时++;否则只有指向s的指针++;
        while (i < len && j < length) {
            if (word[i] === s[j]) {
                ++i;
            }
            ++j;
        }
        // 第三步:如果指向word的指针先指向空 则证明是符合条件的;然后看他是不是长度最长且字母序最小的字符串
        if(i===len && (len>res.length || (len===res.length && word<res))){
            res = word;
        }
    }
    return res;
};

总结

实现方式其实有很多,这里仅供参考~

由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹