leetcode 524. 通过删除字母匹配到字典里最长单词双指针,在不同字符串中同向查找
Posted CoutCodes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 524. 通过删除字母匹配到字典里最长单词双指针,在不同字符串中同向查找相关的知识,希望对你有一定的参考价值。
解题思路:
依旧是双指针,不过双指针在不同字符串中同向查找,且在使用双指针前需要对被查找集合做排序
1,根据题目要求,先将dictionary的字符串按照字符串的长度从大到小排序,且字符串符合字典序,进行排序,目的是为了接下查找时,dictionary中第一个符合条件字符串的即为题目要求的答案。
2,定义并初始化,字符串s的长度s_len,dictionary的长度d_len,dictionary中字符串的长度ds_len,指向字符串s的指针s_ptr,指向dictionary中第i个字符串的指针ds_ptr。
3,for循环遍历dictionary中所以字符串,获取当前dictionary中第i个的字符串的长度
4,while循环使用双指针,比较字符串s是否包含当前第i个dictionary中的字符串,
(1)如果包含,则d_ptr遍历到dictionary中第i个的字符串的末尾,即d_ptr == ds_len - 1,返回dictionary[i]即为答案,即返回长度最长且字典序最小的字符串。
(2)如果不包含,则d_ptr未遍历到dictionary中第i个的字符串的末尾,且s_ptr遍历到字符串s的末尾
5,退出当前while循环,即将遍历dictionary中的第i+1个字符串,双指针归零为下一个while循环做准备
6,如果退出for循环,则表示答案不存在,则返回空字符串。
代码:
class Solution
public:
string findLongestWord(string s, vector<string> & dictionary)
//字符串的长度从大到小排序,且字符串符合字典序
auto cmp = [&] (string& a, string& b)
if (a.size() == b.size())
return a < b;
return a.size() > b.size();
;
sort(dictionary.begin(), dictionary.end(), cmp);
int s_len = s.size(), d_len = dictionary.size(), ds_len = 0;
int s_ptr = 0, d_ptr = 0;
//双指针方法,遍历字典
for (int i = 0; i < d_len; ++i)
ds_len = dictionary[i].size(); //当前字典的字符串的长度
while (s_ptr < s_len && d_ptr < ds_len)
if (s[s_ptr] == dictionary[i][d_ptr]) //存在相等的字母
if (d_ptr == ds_len - 1) //且已经到达当前字符串的末尾,即存在,因为已经排序,所以第一个符合条件的即为答案
return dictionary[i];
//当前字典的字符串的下一个字母
++d_ptr;
//匹配被查找字符串的下一个字母
++s_ptr;
//比较字典的下一个字符串,被查找字符串的s_ptr归零
s_ptr = 0;
//进行字典的下一个字符串比较,d_ptr归零
d_ptr = 0;
return "";
;
如有不足之处,还望指正 1。
如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ↩︎
以上是关于leetcode 524. 通过删除字母匹配到字典里最长单词双指针,在不同字符串中同向查找的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—524. 通过删除字母匹配到字典里最长单词(双指针)—day38
LeetCode 524. 通过删除字母匹配到字典里最长单词(动态规划) / 695. 岛屿的最大面积 / 54. 螺旋矩阵(背)
LeetCode 524. Longest Word in Dictionary through Deleting (通过删除字母匹配到字典里最长单词)
leetcode 524. 通过删除字母匹配到字典里最长单词双指针,在不同字符串中同向查找