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循环,则表示答案不存在,则返回空字符串。

图片.png

代码:

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


  1. 如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ↩︎

以上是关于leetcode 524. 通过删除字母匹配到字典里最长单词双指针在不同字符串中同向查找的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—524. 通过删除字母匹配到字典里最长单词(双指针)—day38

LeetCode 524. 通过删除字母匹配到字典里最长单词(动态规划) / 695. 岛屿的最大面积 / 54. 螺旋矩阵(背)

LeetCode 524. Longest Word in Dictionary through Deleting (通过删除字母匹配到字典里最长单词)

leetcode 524. 通过删除字母匹配到字典里最长单词双指针,在不同字符串中同向查找

leetcode 524. 通过删除字母匹配到字典里最长单词双指针,在不同字符串中同向查找

leetcode 524. 通过删除字母匹配到字典里最长单词双指针在不同字符串中同向查找