《LeetCode之每日一题》:149.通过删除字母匹配到字典里最长单词

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:149.通过删除字母匹配到字典里最长单词相关的知识,希望对你有一定的参考价值。

通过删除字母匹配到字典里最长单词


题目链接: 通过删除字母匹配到字典里最长单词

有关题目

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

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

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

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

1 <= s.length <= 1000
1 <= dictionary.length <= 1000
1 <= dictionary[i].length <= 1000
s 和 dictionary[i] 仅由小写英文字母组成

题解

法一:双指针

class Solution {
public:
    string findLongestWord(string s, vector<string>& dictionary) {
        string res = "";
        for (auto& t : dictionary){
            int i = 0, j = 0;
            while(j < t.size() && i < s.size()){
                if (s[i] == t[j]){
                    ++j;
                }
                ++i;
            }
            if (j == t.size() && (j > res.size() || (j == res.size() && t < res))){
                res = t;
            }
        }
        return res;
    }
};


法二:排序
参考官方题解评论区下梦璃夜·天星

class Solution {
public:
    string findLongestWord(string s, vector<string>& dictionary) {
        sort(dictionary.rbegin(), dictionary.rend(),
        [](auto&& a, auto&& b){return a.size() < b.size() || (a.size() == b.size() && a > b);});
        dictionary.push_back("");//若没有则返回空字符串
        auto check = [&](string& x){
            int first = 0, second = 0;
            while(first < s.size() && second < x.size()){
                if (s[first++] == x[second]) ++second;
            }
            return second == x.size();
        };
        return *find_if(begin(dictionary), end(dictionary), check);
    }
};

以上是关于《LeetCode之每日一题》:149.通过删除字母匹配到字典里最长单词的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:21.删除并获得点数

《LeetCode之每日一题》:127.删除注释

《LeetCode之每日一题》:213.最长和谐子序列

《LeetCode之每日一题》:198.最长定差子序列

《LeetCode之每日一题》:159.两个字符串的删除操作

《LeetCode之每日一题》:133.删除链表中的节点