Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
编程世界总是离不了算法
最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力
于是决定蹭着假期,加强算法和数据结构相关的知识
那怎么提升呢?
其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode
刷题之旅
第一阶段目标是:200
道,每天1
到2
篇
为了不乱,本系列文章目录分为三部分:
- 今日题目:xxx
- 我的思路
- 代码实现
今天题目: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;
};
总结
实现方式其实有很多,这里仅供参考~
由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹