leetcode 524. 通过删除字母匹配到字典里最长单词 medium
题目描述:
解题思路:
实际两个问题的组合:
1. 如何判断字符串s2是s1的子序列
2. 如何得到 长度最长且字母序最小的 结果
问题1可以用双指针来判断,问题2可以先给dictionary 排序来优化
c++ sort 之后的结果是,调用comp(i, i+n)的结果是true。 所以要想长度最长且字母序最小
auto cmp = [](const string &s1, const string &s2)->bool{
return s1.size() > s2.size() || (s1.size() == s2.size() && s1 < s2);
};
代码:
//
class Solution {
public:
string findLongestWord(string s, vector<string>& dictionary) {
auto cmp = [](const string &s1, const string &s2)->bool{
return s1.size() > s2.size() || (s1.size() == s2.size() && s1 < s2);
};
sort(dictionary.begin(), dictionary.end(), cmp);
for (string &i: dictionary){
if (is_sub(s, i))
return i;
}
return "";
}
// s2 是否s1的子序列
bool is_sub(string &s1, string &s2){
int i = 0, j = 0;
while (i< s1.size() && j <s2.size()){
if (s1[i] == s2[j]){
i++;
j++;
} else {
i++;
}
}
return j == s2.size();
}
};