《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.通过删除字母匹配到字典里最长单词的主要内容,如果未能解决你的问题,请参考以下文章